我正在使用 PyQt5 创建一个应用程序,它有一个非常简单的用户界面。有一个下拉列表,可以从中选择一个值,然后有一个按钮,可以单击该按钮,然后将根据下拉列表中的当前值执行操作。
目前,如果我运行下面的代码,我可以从下拉列表中获取一个值,并将在myaction.myaction(customer_name)运行之前将其发送到工作线程。代码也运行良好,但是当工作线程中的函数运行时,GUI 没有按照我希望的方式工作。当我单击开始按钮时,它应该向 GUI 发出一个信号以禁用该按钮,更改其标签和颜色,但这种情况永远不会发生。当函数完成后,它应该变回原来的形式。
问题是我如何处理信号,还是我的类中有多余的函数?每次单击按钮时将该下拉列表值发送到工作线程的正确方法是什么,以便我可以简单地将其用作那里的变量?
我在网上找到的每一个可能的解决方案都让我很兴奋,但它们都还没有为我工作,或者其中一些对我来说太混乱而无法理解。
这是我已经浏览过的一些答案
#!/usr/bin/env python3
import sys
#import myaction
import time
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QComboBox, QLabel
from PyQt5 import QtCore
class ConfWorker(QtCore.QThread):
updated_button = QtCore.pyqtSignal(list)
updated_label = QtCore.pyqtSignal(str)
updated_error = QtCore.pyqtSignal(str)
request_signal = QtCore.pyqtSignal()
customer = QtCore.pyqtSignal(str)
def __init__(self, parent=None):
super(ConfWorker, self).__init__(parent)
self.customer.connect(self.getcustomer)
def run(self):
self.request_signal.emit()
def getcustomer(self, text):
self.configure(text)
def configure(self, customer_name):
self.updated_button.emit(["In progress...", False]) …Run Code Online (Sandbox Code Playgroud)