问题遇到的现象和发生背景
python 3.7 PySide2 使用多线程中创建界面一直无响应
实现功能是,需要并行处理,所以需要创建多个线程,各个线程中有部分的界面处理,所以计划在各个线程中单独创建界面显示,但是一直提示界面无响应。
在主线程中创建界面都显示正常。
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
class TestSubWin(QWidget):
# 显示一个窗口期
ui = None
def show_win(self):
self.ui = QUiLoader().load('ui/CodeIdentify.ui')
self.ui.show()
return
class SubThread(QThread):
# 创建一个线程, 在子线程中显示窗口
sub_win = None
ui = None
def run(self) -> None:
time.sleep(2)
self.sub_win = TestSubWin()
self.sub_win.show_win()
while True:
time.sleep(20)
# 主界面
class Main(QWidget):
th = None
th_win = None
def __init__(self, debug):
self.debug = debug
self.ui = QUiLoader().load('ui/MainSearchWindow.ui')
super(Main, self).__init__()
self.ui.btn_start.clicked.connect(self.single_dev_process)
def single_dev_process(self):
# 调试2种方法
if self.debug: # 通过子线程创建新界面,新界面响应
self.th = SubThread()
self.th.start()
else: # 直接创建新界面,正常显示
self.th_win = TestSubWin()
self.th_win.show_win()
if __name__ == "__main__":
app = QApplication([])
main_win = Main(True)
main_win.ui.show()
app.exec_()
sys.exit(-1)
运行结果及详细报错内容
1、直接创建窗口显示正常:
2、子线程中显示无响应
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
目前的解决办法是将子线程的需求发送消息到主线程,然后主线程的消息处理完成后,再返回消息给子线程,这样处理复杂度太高,需要增加2个消息发送的过程。
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
期望能够在子线程中能够显示界面