我使用 PyQt5 创建了一个简单的 GUI,其中包括 QDial 小部件。我想更改特定 QDial 的颜色,以及显示 QDial 旋转相关值的相应 QLineEdit 的颜色。
我使用 QDesigner 设计了完整的 QWidget,然后将 .ui 文件转换为 .py 文件,然后编写了一个新的 python 文件,其中的 'logic' 类继承自原始 ui/py/Designer 输出。
相关代码如下:
class Logic(QtWidgets.QMainWindow, Ui_From_Designer):
def __init__(self, *args, **kwargs):
QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
self.setupUi(self)
(...)
self.dial_TL.valueChanged.connect(self.OnChange_Dial_TL)
(...)
def OnChange_Dial_TL(self):
self.lineEdit_TL.setStyleSheet("background-color: rgb(160, 40, 40);")
self.dial_TL.setStyleSheet("background-color: rgb(160, 40, 40);")
self.lineEdit_TL.setText(hex(self.dial_TL.value())[2:].upper())
app.processEvents()
time.sleep(0.01)
self.lineEdit_TL.setStyleSheet("")
self.dial_TL.setStyleSheet("")
app.processEvents()
time.sleep(0.01)
现在,GUI 可以正常工作并完成工作,但是,当 QDial 旋转(鼠标滚轮)时间过长时,解释器最终会崩溃。没有典型的回溯错误——唯一的症状是 Windows 冻结了 GUI,三秒钟后窗口被破坏。
当我从上面的代码中删除 app.processEvents() 行时,不会发生这种行为 - 因此我怀疑旋转 QDials 时来自鼠标滚轮的输入太快/处理太多了。但是如果没有 app.processEvents(),QDial.changeValue 上的颜色不会改变。
有没有办法优化上面的代码来处理更多的输入,或者增加 app.processEvents 队列的深度,让它不会崩溃?