按下保存按钮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后关闭第二个小部件的主要内容,如果未能解决你的问题,请参考以下文章