PyQt5 switch between windows
我想根据图块创建菜单。现在我需要 PyQt5 概念,如何将 MainWindow 切换到 Window1/Window2/... 并返回 MainWindow 选项。我唯一实现的就是在顶部打开一个新窗口。我宁愿有单独的窗口,在那里我可以定义不同的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | from PyQt5 import QtGui from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton from PyQt5.QtCore import pyqtSlot import sys class Window(QMainWindow): def __init__(self): super().__init__() self.title ="App" self.top = 100 self.left = 100 self.width = 680 self.height = 500 self.InitUI() def InitUI(self): self.setWindowTitle(self.title) self.setGeometry(self.top, self.left, self.width, self.height) buttonWindow1 = QPushButton('Window1', self) buttonWindow1.move(100, 100) buttonWindow1.clicked.connect(self.buttonWindow1_onClick) buttonWindow2 = QPushButton('Window2', self) buttonWindow2.move(100, 200) buttonWindow2.clicked.connect(self.buttonWindow2_onClick) self.show() @pyqtSlot() def buttonWindow1_onClick(self): self.statusBar().showMessage("Switched to window 1") @pyqtSlot() def buttonWindow2_onClick(self): self.statusBar().showMessage("Switched to window 2") if __name__ == '__main__': app=QApplication(sys.argv) ex=Window() sys.exit(app.exec_()) |
试试看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class Window(QMainWindow): def __init__(self): super().__init__() self.title ="App" self.top = 100 self.left = 100 self.width = 680 self.height = 500 self.InitUI() def InitUI(self): self.setWindowTitle(self.title) self.setGeometry(self.top, self.left, self.width, self.height) buttonWindow1 = QPushButton('Window1', self) buttonWindow1.move(100, 100) buttonWindow1.clicked.connect(self.buttonWindow1_onClick) self.lineEdit1 = QLineEdit("Type here what you want to transfer for [Window1].", self) self.lineEdit1.setGeometry(250, 100, 400, 30) buttonWindow2 = QPushButton('Window2', self) buttonWindow2.move(100, 200) buttonWindow2.clicked.connect(self.buttonWindow2_onClick) self.lineEdit2 = QLineEdit("Type here what you want to transfer for [Window2].", self) self.lineEdit2.setGeometry(250, 200, 400, 30) self.show() @pyqtSlot() def buttonWindow1_onClick(self): self.statusBar().showMessage("Switched to window 1") self.cams = Window1(self.lineEdit1.text()) self.cams.show() self.close() @pyqtSlot() def buttonWindow2_onClick(self): self.statusBar().showMessage("Switched to window 2") self.cams = Window2(self.lineEdit2.text()) self.cams.show() self.close() class Window1(QDialog): def __init__(self, value, parent=None): super().__init__(parent) self.setWindowTitle('Window1') self.setWindowIcon(self.style().standardIcon(QStyle.SP_FileDialogInfoView)) label1 = QLabel(value) self.button = QPushButton() self.button.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) self.button.setIcon(self.style().standardIcon(QStyle.SP_ArrowLeft)) self.button.setIconSize(QSize(200, 200)) layoutV = QVBoxLayout() self.pushButton = QPushButton(self) self.pushButton.setStyleSheet('background-color: rgb(0,0,255); color: #fff') self.pushButton.setText('Click me!') self.pushButton.clicked.connect(self.goMainWindow) layoutV.addWidget(self.pushButton) layoutH = QHBoxLayout() layoutH.addWidget(label1) layoutH.addWidget(self.button) layoutV.addLayout(layoutH) self.setLayout(layoutV) def goMainWindow(self): self.cams = Window() self.cams.show() self.close() class Window2(QDialog): def __init__(self, value, parent=None): super().__init__(parent) self.setWindowTitle('Window2') self.setWindowIcon(self.style().standardIcon(QStyle.SP_FileDialogInfoView)) label1 = QLabel(value) self.button = QPushButton() self.button.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) self.button.setIcon(self.style().standardIcon(QStyle.SP_ArrowLeft)) self.button.setIconSize(QSize(200, 200)) layoutV = QVBoxLayout() self.pushButton = QPushButton(self) self.pushButton.setStyleSheet('background-color: rgb(0,0,255); color: #fff') self.pushButton.setText('Click me!') self.pushButton.clicked.connect(self.goMainWindow) layoutV.addWidget(self.pushButton) layoutH = QHBoxLayout() layoutH.addWidget(label1) layoutH.addWidget(self.button) layoutV.addLayout(layoutH) self.setLayout(layoutV) def goMainWindow(self): self.cams = Window() self.cams.show() self.close() if __name__ == '__main__': app=QApplication(sys.argv) ex=Window() sys.exit(app.exec_()) |
试试这个:
1 2 3 4 5 6 | from file2 import Ui_Dialog2 #------>import the class for next window def buttonWindow1_onClick(self): self.window=QtWidgets.QMainWindow() self.ui=Ui_Dialog2() #------------->creating an object self.ui.setupUi(self.window) self.window.show() |
这里 Ui_Dialog2() 表示您正在为新窗口创建一个对象(在您的情况下,为 Window1 创建对象以将 MainWindow 切换到 Window1 )。因此,当您单击下一个按钮时,将调用此函数,因此为下一个窗口,该窗口将被打开。