python 3.7 PySide2 使用多线程中创建界面一直无响应
实现功能是,需要并行处理,所以需要创建多个线程,各个线程中有部分的界面处理,所以计划在各个线程中单独创建界面显示,但是一直提示界面无响应。
在主线程中创建界面都显示正常。
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个消息发送的过程。
期望能够在子线程中能够显示界面
子线程无法操作界面的,必须在主线程中
子线程创建的界面不在主线程中,所以都在后台,你看不见