君轶79 2023-01-18 10:53 采纳率: 100%
浏览 20
已结题

PySide2 子线程无法创建界面的问题

问题遇到的现象和发生背景

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、直接创建窗口显示正常:

img


2、子线程中显示无响应

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

目前的解决办法是将子线程的需求发送消息到主线程,然后主线程的消息处理完成后,再返回消息给子线程,这样处理复杂度太高,需要增加2个消息发送的过程。

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

期望能够在子线程中能够显示界面

  • 写回答

2条回答 默认 最新

  • cjh4312 2023-01-18 10:59
    关注

    子线程无法操作界面的,必须在主线程中

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月18日
  • 创建了问题 1月18日

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!