簡體   English   中英

PyQt5-對話框未通過按鈕關閉

[英]PyQt5 - Dialog not closing via push button

我無法獲取“取消”按鈕來關閉用於簡單登錄應用程序的對話框。

我試圖解決這個問題,但我一直在不斷發現未知的“屬性錯誤”。

我使用pyuic5為ui生成了ptyhon代碼,然后將其復制到main.py的末尾

該代碼的這一部分看起來與網上看到的其他示例不同

有什么建議嗎?

Login_Dialog.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_loginDialog(object):
    def setupUi(self, loginDialog):
    loginDialog.setObjectName("loginDialog")
    loginDialog.resize(400, 300)
    self.newuser_pushButton = QtWidgets.QPushButton(loginDialog)
    self.newuser_pushButton.setGeometry(QtCore.QRect(50, 230, 75, 31))
    self.newuser_pushButton.setObjectName("newuser_pushButton")
    self.login_pushButton = QtWidgets.QPushButton(loginDialog)
    self.login_pushButton.setGeometry(QtCore.QRect(160, 230, 75, 31))
    self.login_pushButton.setObjectName("login_pushButton")
    self.cancel_pushButton = QtWidgets.QPushButton(loginDialog)
    self.cancel_pushButton.setGeometry(QtCore.QRect(270, 230, 75, 31))
    self.cancel_pushButton.setObjectName("cancel_pushButton")
    self.username_LineEdit = QtWidgets.QLineEdit(loginDialog)
    self.username_LineEdit.setGeometry(QtCore.QRect(140, 60, 201, 31))
    self.username_LineEdit.setObjectName("username_LineEdit")
    self.password_LineEdit = QtWidgets.QLineEdit(loginDialog)
    self.password_LineEdit.setGeometry(QtCore.QRect(140, 110, 201, 31))
    self.password_LineEdit.setEchoMode(QtWidgets.QLineEdit.Password)
    self.password_LineEdit.setObjectName("password_LineEdit")
    self.label = QtWidgets.QLabel(loginDialog)
    self.label.setGeometry(QtCore.QRect(30, 70, 91, 16))
    self.label.setObjectName("label")
    self.label_2 = QtWidgets.QLabel(loginDialog)
    self.label_2.setGeometry(QtCore.QRect(60, 120, 47, 13))
    self.label_2.setObjectName("label_2")

    self.retranslateUi(loginDialog)
    QtCore.QMetaObject.connectSlotsByName(loginDialog)

def retranslateUi(self, loginDialog):
    _translate = QtCore.QCoreApplication.translate
    loginDialog.setWindowTitle(_translate("loginDialog", "Login"))
    self.newuser_pushButton.setText(_translate("loginDialog", "New User"))
    self.login_pushButton.setText(_translate("loginDialog", "Login"))
    self.cancel_pushButton.setText(_translate("loginDialog", "Cancel"))
    self.label.setText(_translate("loginDialog", "Username (Email)"))
    self.label_2.setText(_translate("loginDialog", "Password"))

main.py

import sys
import Login_Dialog
from PyQt5 import QtCore, QtGui, QtWidgets
from Login_Dialog import Ui_loginDialog



class ui(Login_Dialog):

    def __init__(self):
        super(ui, self).__init__()
        self.cancel_pushButton.clicked.connect(self.reject)

    def reject(self):
        self.close()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    loginDialog = QtWidgets.QDialog()
    ui = Ui_loginDialog()
    ui.setupUi(loginDialog)
    loginDialog.show()
    sys.exit(app.exec_())

您的代碼具有以下錯誤:

  • Login_Dialog指向一個.py文件,它不是類,因此您無法繼承它。

  • Qt Designer僅提供一個用於填充窗口小部件的設計類,而不是窗口小部件。 PyQt建議創建一個新的小部件,並使用Qt Designer提供的類進行填寫。

  • reject是QDialog方法,因此您可以直接連接它以關閉窗口,而無需使用close()

通過以上所有操作,您的代碼應如下所示:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from Login_Dialog import Ui_loginDialog

class ui(QtWidgets.QDialog, Ui_loginDialog):
    def __init__(self):
        super(ui, self).__init__()
        self.setupUi(self)
        self.cancel_pushButton.clicked.connect(self.reject)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = ui()
    w.show()
    sys.exit(app.exec_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM