我有一个运行在QThread中的进程,它生成一些我想保存到文件中的数据。在执行此操作之前,我需要检查是否具有写入文件的正确权限(这在Windows上),并且我确实希望使用带有“重试”和“取消”选项的QtWidgets.QMessageBox
。这很容易通过例如(在我的例子中,典型的问题是用户在Excel中打开了xlsx文件)
reply = QtWidgets.QMessageBox.warning(
self, "PermissionError",
"Could not open file \"%s\". Try closing the file if it is open." % filename,
QtWidgets.QMessageBox.StandardButton.Retry,
QtWidgets.QMessageBox.StandardButton.Cancel
)
但这只在主(GUI)线程中有效,而不在单独的QThread中有效。从QThread执行此操作的好方法是什么
我已经用QThread发送到GUI线程中打开对话框的插槽的信号进行了一些测试。但是我发现很难将权限检查的结果反馈给QThread,逻辑很快就会变得混乱
根据我的经验,将QThread子分类的方法不适合这些情况
一个简单的解决方案是使用worker(QThread)-thread方法,因为worker可以执行多个任务,例如执行繁重的计算和保存文件。因此GUI可以启动第一个任务,然后生活在另一个线程中的工作人员通过向GUI发送信号发出确认请求,然后GUI可以根据您的结果调用另一个任务
上述情况的一个例子如下:
相关问题 更多 >
编程相关推荐