与WinForms激活事件等效的PyQt是什么?

问题描述 投票:0回答:1

我正在编写一个小的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()运行。

python pyqt pyqt5
1个回答
0
投票

show方法没有被阻止,因此,一旦执行,QMessageBox将显示在QApplication.quit()上,而您应该使用exec_(),它将等待用户通过按钮关闭QMessageBox。] >

# ...
error.setStandardButtons(QMessageBox.Ok)
error.exec_()
QApplication.quit()
© www.soinside.com 2019 - 2024. All rights reserved.