python - 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
解决方案是什么?
解决方案
推荐阅读
- android - android FLAG_SHOW_WHEN_LOCKED 等效
- java - 为什么spring data rest保持继承实体的任意顺序
- node.js - 如何用 npm 解决这个频繁的“无法解析 json”问题?
- java - 如何在 Spring Boot 中记录无效 404 请求的请求路径?
- ruby-on-rails - 附加文件时的 Rails ActiveStorage 范围
- android - 在应用用户之间发送 Android 通知
- c# - 在 Unity 中检测订阅
- sql - SQL从订单中查找准备好的项目
- c++ - 已声明但未初始化的项目的初始化列表
- angular - Iionic - 可点击的搜索栏