我正在编写一个小的PyQt应用程序,该应用程序在启动前需要运行一些检查,如果任何检查失败,则该应用程序需要通知用户它无法运行,然后退出。
在WinForms中。我可以简单地做到这一点:
var form = new Form();
form.Activated += (s, e) =>
{
var condition = true;
if (condition)
{
MessageBox.Show("oh dear, something's wrong.");
Application.Exit();
}
};
PyQt似乎没有信号可以在主应用程序窗口加载后连接到,并且当条件失败时,我当前的尝试甚至不会触发对话框。
这是我目前所拥有的。程序流程如下:
class MainWindow(QWidget):
# UI stuff omitted...
def loadData(self):
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Path\To\Key')
path = winreg.QueryValueEx(key, 'install_path')[0]
# I'll do stuff with path here...
except FileNotFoundError:
error = QMessageBox()
error.setIcon(QMessageBox.Critical)
error.setText('Cannot locate directory.')
error.setWindowTitle('Cannot find registry key')
error.setStandardButtons(QMessageBox.Ok)
error.show()
QApplication.quit()
def main():
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.loadData()
main_window.show()
sys.exit(app.exec_())
main()
我的最终目标是当应用程序完全加载并显示给用户时,让loadData()
运行。
show方法没有被阻止,因此,一旦执行,QMessageBox将显示在QApplication.quit()上,而您应该使用exec_(),它将等待用户通过按钮关闭QMessageBox。] >
# ...
error.setStandardButtons(QMessageBox.Ok)
error.exec_()
QApplication.quit()