【问题标题】:python pyqt multiple classespython pyqt 多个类
【发布时间】:2016-06-07 19:59:07
【问题描述】:

我正在编写一个程序,我已经执行以下操作。

  1. 使用对话框获取用户凭据
  2. 如果成功启动另一个应用程序,如果不成功则再次提示输入凭据。 我正在使用两个名为 x_LoginForm 和 x_Application 的类来实现这一点 代码如下 类 x_LoginForm(QDialog) 类中的元素
  3. QLineEdit 获取用户名
  4. QLineEdit 获取密码
  5. QPushbutton 取消
  6. QPushbutton 登录

如果登录成功,我会设置一个标志 main_window_flag 为 1 类 x_Application()

这个类将启动一个新的应用程序并为用户提供控制。 如果标志 main_window_flag 设置为 1,则该类的对象将被实例化

main_window_flag=0
if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv)
    form = x_LoginForm()
    form.show()
    if main_window_flag == 1:
        window = x_Application()
        window.show() 
sys.exit(app.exec_())

在 x_LoginForm 类中 当我验证后,我想将控件传递回 main,并实例化 x_Application 类的对象。 要退出 x_LoginForm 类,如果我发出 self.close - 整个程序都会关闭。

【问题讨论】:

  • 我想你问的是为什么if 块中的代码没有被执行?
  • 是的。我也在问我如何让 if 块中的代码执行。

标签: python class login pyqt


【解决方案1】:

发生的情况是form.show() 立即返回,然后您的程序执行if 检查,这可能评估为False,因为您有main_window_flag=0,如果您将form.show() 更改为form.exec_(),它将等待直到表单关闭,然后继续执行代码。阅读此处了解有关modal dialogs 的更多信息。

【讨论】:

  • 感谢总线故障。 form.exec_() 部分解决了我的问题。现在执行 if 块,并启动主应用程序。它开始出错 QWidget::repaint: Recursive repaint detected QPixmap: It is not safe to use pixmaps outside the GUI thread QWidget::repaint: Recursive repaint detected 让我更好地解释一下场景,有一个现有的应用程序是用python 和 pyqt 运行良好
  • x_Application QApplication?
  • 是的,它是一个QApplication
  • 嗯。好的。我认为您不能拥有两个QApplication 实例。我很惊讶它正在工作。您能否添加至少一些x_Application 代码,尤其是类定义__init__()show()?以及您在原始帖子中看到的错误消息?
  • 非常感谢您的帮助,我现在找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多