首页 > 解决方案 > PyQt 在线程上调用子 QMainWindow.Show() 时冻结

问题描述

我试图在我的 QT 应用程序中打开一个子窗口。当我从 UI 线程调用它时,它工作正常,但是当我从 threading.Timer 函数调用QtWidgets.QMainWindow().show()时,整个应用程序会冻结。

这是我的主窗口

def main():
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())

定时器功能

def checkForAlarm(self):
    if self.getIsActive() :
        if self.handler != None:
            timeDelta = self.getTimeLeft()
            if timeDelta.total_seconds()<1 and timeDelta.total_seconds()>-1 :

                self.handler(self) # calls raiseAlarm to open child window

        Timer(1.0, self.checkForAlarm).start()

这是我从线程调用的函数的调用。

def raiseAlarm(self,alarm:Alarm):
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_AlarmDialog()
    ui.setupUi(MainWindow)

    MainWindow.show() #Application becomes unresponsive

解决方案是什么?

标签: pythontimerpyqtpython-multithreading

解决方案


推荐阅读