按下保存按钮pyqt5后关闭第二个小部件

Posted

技术标签:

【中文标题】按下保存按钮pyqt5后关闭第二个小部件【英文标题】:Close second widget after pressing save button pyqt5 【发布时间】:2018-03-25 12:29:19 【问题描述】:

我正在编写一个应用程序,其中主窗口小部件窗口打开第二个窗口小部件窗口,在第二个窗口小部件窗口中,我从用户那里获取一些输入并点击保存按钮,第二个窗口小部件窗口应该将数据保存到 xml 文件中并且应该关闭但第二个窗口没有关闭。 我尝试了来自谷歌的大部分东西,比如self.close(), self.destroy(),self.hide() self.window().hide(), self.window().destroy(),它们都不起作用。

我不想这样做sys.exit(),因为这是关闭完整的应用程序,但只需在单击保存按钮后关闭 secondWidgetWindow,以便用户可以在第一个小部件窗口中执行另一项工作。

下面是sn-p:

FirstWidgetWindow.py

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_firstWidgetWindow(QtWidgets.QMainWindow):
    def __init__(self,firstWidgetWindow):
        super().__init__()
        self.setupUi(firstWidgetWindow)

    def setupUi(self, firstWidgetWindow):
        ### code to create Button ###
        self.btnOpenNewWidgetWindow.clicked.connect(self.openNewWindow)

    def openNewWindow(self):
        self.secondWidgetWindow = QtWidgets.QWidget()
        self.ui = Ui_secondWidgetWindow()
        self.ui.setupUi(self.secondWidgetWindow)
        self.secondWidgetWindow.show()
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    firstWidgetWindow = QtWidgets.QWidget()
    ui = Ui_firstWidgetWindow(firstWidgetWindow)
    firstWidgetWindow.show()
    sys.exit(app.exec_())

secondWidgetWindow.py

class Ui_secondWidgetWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

    def setupUi(self, secondWidgetWindow):
        ### creating line edit to take input from user
        ### creating save button

        self.btnSave.clicked.connect(self.saveUserInput)

    def saveUserInput(self):
        ## saving user inputs in xml file
        self.close()  ## here i needs to close this window.

【问题讨论】:

请提供minimal reproducible example。 【参考方案1】:

按下保存按钮后关闭第二个小部件:

self.secondWidgetWindow.hide()

试试看:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_secondWidgetWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.secondWidgetWindow = None

    def setupUi(self, secondWidgetWindow):
        self.secondWidgetWindow = secondWidgetWindow
        ### creating line edit to take input from user
        self.line_edit = QtWidgets.QLineEdit(secondWidgetWindow)
        self.line_edit.setGeometry(20, 20, 300, 20)

        ### creating save button
        self.btnSave = QtWidgets.QPushButton('save', secondWidgetWindow)
        self.btnSave.setGeometry(50, 50, 100, 50)
        self.btnSave.clicked.connect(self.saveUserInput)

    def saveUserInput(self):
        ## saving user inputs in xml file
        #self.close()  ## here i needs to close this window.
        self.secondWidgetWindow.hide()
        QtWidgets.QMessageBox.information(self, "SAVE",
                                        "saving user inputs in xml file")


class Ui_firstWidgetWindow(QtWidgets.QMainWindow):
    def __init__(self,firstWidgetWindow):
        super().__init__()

        self.setupUi(firstWidgetWindow)

    def setupUi(self, firstWidgetWindow):
        ### code to create Button ###
        self.btnOpenNewWidgetWindow = QtWidgets.QPushButton('OpenNewWidgetWindow', firstWidgetWindow)
        self.btnOpenNewWidgetWindow.setGeometry(50, 100, 300, 50)
        self.btnOpenNewWidgetWindow.clicked.connect(self.openNewWindow)

    def openNewWindow(self):
        self.secondWidgetWindow = QtWidgets.QWidget()
        self.ui = Ui_secondWidgetWindow()
        self.ui.setupUi(self.secondWidgetWindow)
        self.secondWidgetWindow.show()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    firstWidgetWindow = QtWidgets.QWidget()
    ui = Ui_firstWidgetWindow(firstWidgetWindow)
    firstWidgetWindow.setGeometry(700, 250, 400, 200)
    firstWidgetWindow.show()
    sys.exit(app.exec_())

【讨论】:

非常感谢,我也是这么想的,但我不知道该怎么做 :) 嗨,我需要更多帮助,点击保存按钮后,第二个小部件应该会关闭,并且会发送一个触发器来运行一个函数以在该行中显示相同的内容(来自第二个窗口的 lineedit)编辑第一个窗口。 我无法在此处添加代码。给我一个地址,我会给你发邮件 非常感谢 :) 我的邮件 ID 是:kumaravinashse@gmail.com

以上是关于按下保存按钮pyqt5后关闭第二个小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何将上下文传递给提供者的第二个小部件树

在 Flutter 中按下切换开关时交换小部件

显示当前小部件类之外的小部件

在滚动区域小部件的 PyQt5 中添加 n 列

动态图像上传到备用gridster小部件上

pyqt5 永久小部件焦点