如何使用PushButton关闭Qdialog窗口?

发布于 2025-02-06 08:22:20 字数 3789 浏览 1 评论 0原文

我目前正在从事这个GUI项目。我创建了一个设置窗口,但是在按下按钮后我无法将其关闭。我尝试使用self.close()self.accept()self.reject()方法。当我单击按钮时,什么都不会发生。这是我的代码,它简化了:

from PyQt5.QtWidgets import (QLineEdit, QWidget, QMenu, QMenuBar, QAction, 
                            QMainWindow, QApplication, QDialog, QPushButton, QVBoxLayout)
from PyQt5.QtCore import QSize, QRect, QMetaObject, QCoreApplication, QObject, Qt


class Ui_Dialog(QDialog):
    def __init__(self):
        super(Ui_Dialog, self).__init__()


    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(100, 100)
        self.verticalLayout= QVBoxLayout(Dialog)

        self.lineEdit = QLineEdit(Dialog)
        self.lineEdit.setObjectName("lineEdit")        
        self.verticalLayout.addWidget(self.lineEdit)
        self.pushButton = QPushButton(Dialog)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QPushButton(Dialog)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout.addWidget(self.pushButton_2)


        self.pushButton.clicked.connect(self.close)
        self.pushButton_2.clicked.connect(self.save)
    

        self.retranslateUi(Dialog)
        QMetaObject.connectSlotsByName(Dialog)



    def save(self):
        global setting
        setting = self.lineEdit.text()
        self.done(1)
        self.accept()
        self.deleteLater()
        self.destroy()
        self.reject()
        self.close()



    def retranslateUi(self, Dialog):
        _translate = QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Settings"))
        self.pushButton_2.setText(_translate("Dialog", "Save"))
        self.pushButton.setText(_translate("Dialog", "Cancel"))



class Ui_MainWindow(QObject):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1250, 609)
        MainWindow.setMinimumSize(QSize(833, 600))
        self.centralWidget = QWidget(MainWindow)
        MainWindow.setCentralWidget(self.centralWidget)
        self.centralWidget.setObjectName("centralwidget")

        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QRect(0, 0, 906, 21))
        self.menubar.setObjectName("menubar")
        self.menuOptions = QMenu(self.menubar)
        self.menuOptions.setObjectName("menuOptions")
        MainWindow.setMenuBar(self.menubar)
        self.actionSettings = QAction(MainWindow)       
        self.actionSettings.setObjectName("actionSettings")
        self.menuOptions.addAction(self.actionSettings)
        self.menubar.addAction(self.menuOptions.menuAction())

        self.actionSettings.triggered.connect(self.preferences)
       

        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)



    def retranslateUi(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "closinDialogSample"))
        self.menuOptions.setTitle(_translate("MainWindow", "Options"))
        self.actionSettings.setText(_translate("MainWindow", "Settings"))


    def preferences(self):
        self.preferences_dialog = QDialog()
        self.preferences_dialog.ui = Ui_Dialog()
        self.preferences_dialog.ui.setupUi(self.preferences_dialog)
        self.preferences_dialog.setAttribute(Qt.WA_DeleteOnClose)
        self.preferences_dialog.setModal(True)
        self.preferences_dialog.show()


if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

谢谢您的阅读。

i am currently working on this gui project. and i create a settings window but i cant make it close after pushing the buttons. i tried use self.close(), self.accept(), self.reject() methods. When i click the button nothing happens. Here is my code, which is simplified :

from PyQt5.QtWidgets import (QLineEdit, QWidget, QMenu, QMenuBar, QAction, 
                            QMainWindow, QApplication, QDialog, QPushButton, QVBoxLayout)
from PyQt5.QtCore import QSize, QRect, QMetaObject, QCoreApplication, QObject, Qt


class Ui_Dialog(QDialog):
    def __init__(self):
        super(Ui_Dialog, self).__init__()


    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(100, 100)
        self.verticalLayout= QVBoxLayout(Dialog)

        self.lineEdit = QLineEdit(Dialog)
        self.lineEdit.setObjectName("lineEdit")        
        self.verticalLayout.addWidget(self.lineEdit)
        self.pushButton = QPushButton(Dialog)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QPushButton(Dialog)
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout.addWidget(self.pushButton_2)


        self.pushButton.clicked.connect(self.close)
        self.pushButton_2.clicked.connect(self.save)
    

        self.retranslateUi(Dialog)
        QMetaObject.connectSlotsByName(Dialog)



    def save(self):
        global setting
        setting = self.lineEdit.text()
        self.done(1)
        self.accept()
        self.deleteLater()
        self.destroy()
        self.reject()
        self.close()



    def retranslateUi(self, Dialog):
        _translate = QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Settings"))
        self.pushButton_2.setText(_translate("Dialog", "Save"))
        self.pushButton.setText(_translate("Dialog", "Cancel"))



class Ui_MainWindow(QObject):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1250, 609)
        MainWindow.setMinimumSize(QSize(833, 600))
        self.centralWidget = QWidget(MainWindow)
        MainWindow.setCentralWidget(self.centralWidget)
        self.centralWidget.setObjectName("centralwidget")

        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QRect(0, 0, 906, 21))
        self.menubar.setObjectName("menubar")
        self.menuOptions = QMenu(self.menubar)
        self.menuOptions.setObjectName("menuOptions")
        MainWindow.setMenuBar(self.menubar)
        self.actionSettings = QAction(MainWindow)       
        self.actionSettings.setObjectName("actionSettings")
        self.menuOptions.addAction(self.actionSettings)
        self.menubar.addAction(self.menuOptions.menuAction())

        self.actionSettings.triggered.connect(self.preferences)
       

        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)



    def retranslateUi(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "closinDialogSample"))
        self.menuOptions.setTitle(_translate("MainWindow", "Options"))
        self.actionSettings.setText(_translate("MainWindow", "Settings"))


    def preferences(self):
        self.preferences_dialog = QDialog()
        self.preferences_dialog.ui = Ui_Dialog()
        self.preferences_dialog.ui.setupUi(self.preferences_dialog)
        self.preferences_dialog.setAttribute(Qt.WA_DeleteOnClose)
        self.preferences_dialog.setModal(True)
        self.preferences_dialog.show()


if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Thank you for reading.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文