Files
2026-07-13 12:35:09 +08:00

100 lines
2.8 KiB
Python

# -*- coding: utf-8 -*-
"""
@Time : 2023/6/27/027 9:11
@Author : 李子
@Url : https://github.com/kslz
"""
from PySide6.QtCore import QMutex, Signal, QObject, QMutexLocker, QRunnable, QThreadPool, Qt
from PySide6.QtWidgets import QWidget, QLabel, QSpinBox, QHBoxLayout
class ProgressUpdater(QObject):
"""
进度更新器,用于接收任务完成信号并更新进度条
"""
progressUpdated = Signal(int)
def __init__(self, progress_bar):
super().__init__()
self.progress_bar = progress_bar
self.mutex = QMutex()
def updateProgress(self):
with QMutexLocker(self.mutex):
# 更新进度条
self.progress_bar.setValue(self.progress_bar.value() + 1)
class SignalTool(QObject):
"""
这个类唯一的作用是用来帮发不出信号的物件发出信号
"""
started = Signal()
finished = Signal()
change_count = Signal(int)
class CustomThreadPool(QThreadPool):
noTasksRunning = Signal()
def __init__(self, parent=None):
super().__init__(parent)
self.activeTasks = 0
self.mutex = QMutex()
def start(self, arg__1, priority=0):
self.changeActiveTasks(1)
super().start(arg__1, priority)
self.changeActiveTasks(-1)
self.taskFinished()
def changeActiveTasks(self, change):
with QMutexLocker(self.mutex):
self.activeTasks += change
def taskFinished(self):
with QMutexLocker(self.mutex):
if self.activeTasks == 0:
self.noTasksRunning.emit()
class ScoreWdiget(QWidget):
def __init__(self, name, k, v, parent):
super().__init__(parent)
self.k = k
# 创建标签和旋钮框
self.label = QLabel(name)
self.spinbox = QSpinBox()
font = self.label.font()
font.setPointSize(12)
self.label.setFont(font)
self.spinbox.setFont(font)
# 设置旋钮框的范围和初始值
self.spinbox.setMinimum(0)
self.spinbox.setMaximum(100)
self.spinbox.setValue(v)
# 创建水平布局
self.layout = QHBoxLayout(self)
self.layout.setContentsMargins(0, 0, 0, 0) # 这个布局的边框我找了2个小时才找出来,警钟长鸣
# 将标签和旋钮框添加到布局中
self.layout.addWidget(self.label)
self.layout.addWidget(self.spinbox)
# 设置标签靠左,旋钮框靠右
self.layout.setAlignment(self.label, Qt.AlignLeft)
self.layout.setAlignment(self.spinbox, Qt.AlignRight)
def change_text(self, name, k, v):
self.label.setText(name)
self.k = k
self.spinbox.setValue(v)
def get_score(self, score_dict: dict):
score_dict[self.k] = self.spinbox.value()