【问题标题】:How can I fix PyQt5 widget crash problem? [duplicate]如何修复 PyQt5 小部件崩溃问题? [复制]
【发布时间】:2021-07-04 05:26:31
【问题描述】:

我正在使用 Python 3.7 和 PyQt5 5.15.4 编写程序,但我遇到了突然崩溃的问题。 这是显示这种现象的简化版本。

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QDialog, QVBoxLayout, QApplication


class WindowA(QWidget):
    def __init__(self):
        super().__init__()
        self.make_layout()

    def make_layout(self):
        vbox = QVBoxLayout()
        self.setLayout(vbox)


class LoginDialog(QDialog):
    def __init__(self):
        super().__init__()

        self.btn_login = QPushButton('Login')
        self.btn_login.clicked.connect(self.btn_login_clicked)

        vbox = QVBoxLayout()
        vbox.addWidget(self.btn_login)
        self.setLayout(vbox)

    def btn_login_clicked(self):
        self.accept()
        main_window = WindowA()
        main_window.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    login_dialog = LoginDialog()
    login_dialog.show()
    sys.exit(app.exec_())

这就是我想要的:

  1. 程序以 LoginDialog 开始,其中包含一个登录按钮。
  2. 如果我按下按钮,就会出现 WindowA。

但是,如果我运行代码,当我在 LoginDialog 中按下登录按钮时,WindowA 会闪烁,并且程序会终止且没有错误消息。

【问题讨论】:

    标签: python pyqt5 qwidget qdialog


    【解决方案1】:

    没有崩溃,两个窗口都关闭,程序运行结束。

    • Lo​​ginDialog 关闭,因为 QDialog.accept() 导致对话框关闭。
    • WindowA 会在函数返回后立即进行垃圾收集。使用实例变量,使其保持在范围内。
    def btn_login_clicked(self):
        self.main_window = WindowA()
        self.main_window.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 2018-01-18
      • 2020-06-16
      • 2022-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多