PyqQt 将代码中 QLabel/QPushButton 的颜色更改为红色(以显示 "Busy"-status)并在执行后再次返回
PyqQt Change Color of QLabel/QPushButton in code to red (to show "Busy"-status) and back again after execution
我正在编写一个使用 PyQt 调用某些外部函数的工具。
基本上,一些文件应该加载到 GUI 中,然后这些文件将通过一些 subprocess.run-command 发送到外部函数。
此功能需要很长时间才能 运行 完全完成,并且该工具在此期间将处于非活动状态。因此,我的目标是通过函数将 QLabel/QPushButton 的 color/icon/... 从“绿色”更改为“红色”,时间为 运行。函数调用完成后,我想将颜色改回“绿色”。因此,它应该模仿状态 lamp.
lamp = QtWidgets.QPushButton(self.centralwidget)
lamp.setStyleSheet("background-color: red")
# external function call
lamp.setStyleSheet("background-color: green")
但是,lamp 标签不会变红,除非外部函数调用包含诸如 QFileDialog 之类的内容或其他暂停程序执行的内容。
我也尝试使用调色板而不是样式 sheet。
我还尝试使用 PyQtSignals 解决问题 - 没有任何效果。
我还尝试使用
强制标签更新其颜色
lamp.style().unpolish(lamp);
lamp.style().polish(lamp);
lamp.update();
非常欢迎我提供解决方案!提前致谢!
我不确定这是不是你想要的。
但我认为你应该使用QThread来执行子进程。
给你QtThread的例子,你自己修改
或者您Google搜索QThread。
class YourQt:
code...
def example(self):
self.lamp = QtWidgets.QPushButton(self.centralwidget)
self.lamp.setStyleSheet("background-color: red")
self.lamp_thread = LampThread()
self.lamp_thread.lamp_signal .connect(self.example_finish)
self.lamp_thread.start()
def example_finish(self, signal):
self.lamp.setStyleSheet("background-color: green")
class LampThread(QtCore.QThread):
lamp_signal = QtCore.pyqtSignal(bool)
def __init__(self):
super(LampThread, self).__init__()
def run(self):
# subprocess.run-command
self.lamp_signal.emit(True)
我正在编写一个使用 PyQt 调用某些外部函数的工具。 基本上,一些文件应该加载到 GUI 中,然后这些文件将通过一些 subprocess.run-command 发送到外部函数。 此功能需要很长时间才能 运行 完全完成,并且该工具在此期间将处于非活动状态。因此,我的目标是通过函数将 QLabel/QPushButton 的 color/icon/... 从“绿色”更改为“红色”,时间为 运行。函数调用完成后,我想将颜色改回“绿色”。因此,它应该模仿状态 lamp.
lamp = QtWidgets.QPushButton(self.centralwidget)
lamp.setStyleSheet("background-color: red")
# external function call
lamp.setStyleSheet("background-color: green")
但是,lamp 标签不会变红,除非外部函数调用包含诸如 QFileDialog 之类的内容或其他暂停程序执行的内容。
我也尝试使用调色板而不是样式 sheet。 我还尝试使用 PyQtSignals 解决问题 - 没有任何效果。
我还尝试使用
强制标签更新其颜色lamp.style().unpolish(lamp);
lamp.style().polish(lamp);
lamp.update();
非常欢迎我提供解决方案!提前致谢!
我不确定这是不是你想要的。
但我认为你应该使用QThread来执行子进程。
给你QtThread的例子,你自己修改
或者您Google搜索QThread。
class YourQt:
code...
def example(self):
self.lamp = QtWidgets.QPushButton(self.centralwidget)
self.lamp.setStyleSheet("background-color: red")
self.lamp_thread = LampThread()
self.lamp_thread.lamp_signal .connect(self.example_finish)
self.lamp_thread.start()
def example_finish(self, signal):
self.lamp.setStyleSheet("background-color: green")
class LampThread(QtCore.QThread):
lamp_signal = QtCore.pyqtSignal(bool)
def __init__(self):
super(LampThread, self).__init__()
def run(self):
# subprocess.run-command
self.lamp_signal.emit(True)