如何在使用 PyQt5 打开新文件时隐藏当前文件 window
How do I hide current window while opening a new one using PyQt5
我已将另一个文件链接到主 window 中的按钮。每次我单击它时,新的 window 都会打开,但旧的(主要的 window)仍然存在。如何在不影响新 window.
的情况下关闭或隐藏它
PS: 我是新来的。对我发布此查询时的任何愚蠢或错误表示歉意。谢谢!
相关代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from create2 import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QWidget
from PyQt5.QtCore import QMargins
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(813, 655)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(190, 50, 501, 591))
self.widget.setObjectName("widget")
.
.
.
def newusr_clk(self):
self.mainwin=QMainWindow()
self.ui=Ui_MainWindow()
self.ui.setupUi(self.mainwin)
self.mainwin.show()
这是一个完整的工作示例。主要的 window 只是一个 QMainWindow
。它将在单击按钮时打开 QDialog
。他们的 ui 定义:
# file ui_main.py
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow:
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(442, 205)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(180, 80, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
#file ui_dialog.py
from PyQt5 import QtCore, QtWidgets
class Ui_Dialog:
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(508, 300)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
在另一个文件中,定义 MainWindow
和 PreferenceDialog
classes:
# file main.py
from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog
from ui_dialog import Ui_Dialog
from ui_main import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.newusr_clk)
newuser_clk
插槽将隐藏 MainWindow
并通过 dialog.exec()
打开一个新的 QDialog
框。当QDialog
关闭时,MainWindow
再次显示。
def newusr_clk(self):
self.hide()
dialog = PreferencesDialog(parent=self)
if dialog.exec():
pass # do stuff on success
self.show()
这里是 PreferenceDialog
class:
class PreferencesDialog(QDialog):
def __init__(self, parent=None):
super(PreferencesDialog, self).__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
下面是 运行 脚本的方法:
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
希望对您有所帮助!
所以我终于想出了如何在打开一个新的时隐藏当前的 window。这是我的代码(因为我使用的是表格):
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
所以我用这个命令隐藏了当前window:
Form.setVisible(False)
这是隐藏当前 window 并打开新 window
的简单方法
class placeOrder(object):
def __init__(self, Form):
Form.setObjectName("Form")
Form.setGeometry(0, 40, 1250, 650)
self.orderWindow = Form
def newWindow(self):
from newWindow import newWindow
self.windowNew = QtWidgets.QMainWindow()
self.newWindowObj=newWindow(self.windowNew)
self.orderWindow.hide()
self.windowNew.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
orderWindow = QtWidgets.QMainWindow()
ui = placeOrder(orderWindow)
orderWindow.show()
sys.exit(app.exec_())
我已将另一个文件链接到主 window 中的按钮。每次我单击它时,新的 window 都会打开,但旧的(主要的 window)仍然存在。如何在不影响新 window.
的情况下关闭或隐藏它PS: 我是新来的。对我发布此查询时的任何愚蠢或错误表示歉意。谢谢!
相关代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from create2 import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QWidget
from PyQt5.QtCore import QMargins
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(813, 655)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(190, 50, 501, 591))
self.widget.setObjectName("widget")
.
.
.
def newusr_clk(self):
self.mainwin=QMainWindow()
self.ui=Ui_MainWindow()
self.ui.setupUi(self.mainwin)
self.mainwin.show()
这是一个完整的工作示例。主要的 window 只是一个 QMainWindow
。它将在单击按钮时打开 QDialog
。他们的 ui 定义:
# file ui_main.py
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow:
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(442, 205)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(180, 80, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
#file ui_dialog.py
from PyQt5 import QtCore, QtWidgets
class Ui_Dialog:
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(508, 300)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
在另一个文件中,定义 MainWindow
和 PreferenceDialog
classes:
# file main.py
from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog
from ui_dialog import Ui_Dialog
from ui_main import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.newusr_clk)
newuser_clk
插槽将隐藏 MainWindow
并通过 dialog.exec()
打开一个新的 QDialog
框。当QDialog
关闭时,MainWindow
再次显示。
def newusr_clk(self):
self.hide()
dialog = PreferencesDialog(parent=self)
if dialog.exec():
pass # do stuff on success
self.show()
这里是 PreferenceDialog
class:
class PreferencesDialog(QDialog):
def __init__(self, parent=None):
super(PreferencesDialog, self).__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
下面是 运行 脚本的方法:
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
希望对您有所帮助!
所以我终于想出了如何在打开一个新的时隐藏当前的 window。这是我的代码(因为我使用的是表格):
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
所以我用这个命令隐藏了当前window:
Form.setVisible(False)
这是隐藏当前 window 并打开新 window
的简单方法class placeOrder(object):
def __init__(self, Form):
Form.setObjectName("Form")
Form.setGeometry(0, 40, 1250, 650)
self.orderWindow = Form
def newWindow(self):
from newWindow import newWindow
self.windowNew = QtWidgets.QMainWindow()
self.newWindowObj=newWindow(self.windowNew)
self.orderWindow.hide()
self.windowNew.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
orderWindow = QtWidgets.QMainWindow()
ui = placeOrder(orderWindow)
orderWindow.show()
sys.exit(app.exec_())