Python 在线程中的Qdialog上调用exec()不会';工作不好
我想在一个线程中调用我的_dialog.exec(),但是当mainwindow(意思是主线程)处理事件时效果不好,我想知道如何处理这个问题 这是我的测试程序: 导入系统 从PyQt5.Qt导入* 从线程导入线程 从时间上导入睡眠 类主(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() 自设置几何体(500500200) self.dialog=QDialog(self) self.dialog.setGeometry(500500200100) btn=QPushButton('点击',自行) 点击连接(self.show_对话框) self.show() def显示_对话框(自身): 线程(target=self.execute).start() def执行(自我): 睡眠(2) #继续移动主窗口,直到显示对话框 self.dialog.exec() app=QApplication(sys.argv) e=主() sys.exit(app.exec_()) 当我按下按钮时,它会先休眠两秒钟。 没有主窗口事件时,这是正常的。Python 在线程中的Qdialog上调用exec()不会';工作不好,python,pyqt,pyqt5,python-3.7,Python,Pyqt,Pyqt5,Python 3.7,我想在一个线程中调用我的_dialog.exec(),但是当mainwindow(意思是主线程)处理事件时效果不好,我想知道如何处理这个问题 这是我的测试程序: 导入系统 从PyQt5.Qt导入* 从线程导入线程 从时间上导入睡眠 类主(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() 自设置几何体(500500200) self.dialog=QDialog(self) self.dialog.setGeometry(500500200100
但是,当我在两个睡眠秒内不断移动主窗口(或其他事件,如调整大小)时,它们都将变得无响应否,您无法从其他线程修改GUI,请使用这些信号 TL;博士强> 我在Qt中有一条黄金法则:您不能也不应该从另一个线程修改GUI。有关更多信息,请阅读: 综上所述,Qt中不同线程中的元素之间交互的自然方式是使用信号,因为它们如下所示:
class Main(QMainWindow):
customSignal = pyqtSignal()
def __init__(self):
# ...
self.show()
self.customSignal.connect(self.dialog.exec_)
def show_dialog(self):
Thread(target=self.execute).start()
def execute(self):
sleep(2)
# keep moving mainwindow untill dialog have shown
self.customSignal.emit()
类主(QMainWindow):
customSignal=pyqtSignal()
定义初始化(自):
# ...
self.show()
self.customSignal.connect(self.dialog.exec)
def显示_对话框(自身):
线程(target=self.execute).start()
def执行(自我):
睡眠(2)
#继续移动主窗口,直到显示对话框
self.customSignal.emit()
谢谢你的回答。它可以完美地解决这个问题。但不能解决我的问题。此外,谢谢你的黄金法则,我经常发现一些不寻常的行为,比如在线程中移动小部件,有时没有问题,有时它可以;现在我知道了,用PyQT信号是不行的