import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * ################################################ #######創建主窗口 ################################################ class FirstMainWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('主界面') ###### 創建界面 ###### self.centralwidget = QWidget() self.setCentralWidget(self.centralwidget) self.Layout = QVBoxLayout(self.centralwidget) # 設置頂部三個按鈕 self.topwidget = QWidget() self.Layout.addWidget(self.topwidget) self.buttonLayout = QHBoxLayout(self.topwidget) self.pushButton1 = QPushButton() self.pushButton1.setText("打開主界面") self.buttonLayout.addWidget(self.pushButton1) self.pushButton2 = QPushButton() self.pushButton2.setText("打開對話框") self.buttonLayout.addWidget(self.pushButton2) self.pushButton3 = QPushButton() self.pushButton3.setText("打開提示框") self.buttonLayout.addWidget(self.pushButton3) # 設置中間文本 self.label = QLabel() self.label.setText("第一個主界面") self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self.label.setAlignment(Qt.AlignCenter) self.label.setFont(QFont("Roman times", 50, QFont.Bold)) self.Layout.addWidget(self.label) # 設置狀態欄 self.statusBar().showMessage("多界面切換示范") # 窗口最大化 self.showMaximized() ###### 三個按鈕事件 ###### self.pushButton1.clicked.connect(self.on_pushButton1_clicked) self.pushButton2.clicked.connect(self.on_pushButton2_clicked) self.pushButton3.clicked.connect(self.on_pushButton3_clicked) # 按鈕一:打開主界面 windowList = [] def on_pushButton1_clicked(self): the_window =SecondWindow() self.windowList.append(the_window) ##注:沒有這句,是不打開另一個主界面的! self.close() the_window.show() # 按鈕二:打開對話框 def on_pushButton2_clicked(self): the_dialog = TestdemoDialog() if the_dialog.exec_() == QDialog.Accepted: pass # 按鈕三:打開提示框 def on_pushButton3_clicked(self): QMessageBox.information(self, "提示", "這是information框!") #QMessageBox.question(self, "提示", "這是question框!") #QMessageBox.warning(self, "提示", "這是warning框!") #QMessageBox.about(self, "提示", "這是about框!") ################################################ #######第二個主界面 ################################################ class SecondWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('第二主界面') # 設置中間文本 self.label = QLabel() self.label.setText("第二個主界面") self.label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self.label.setAlignment(Qt.AlignCenter) self.label.setFont(QFont("Roman times", 50, QFont.Bold)) self.setCentralWidget(self.label) # 設置狀態欄 self.statusBar().showMessage("多界面打開示范") # 窗口最大化 self.showMaximized() ###### 重寫關閉事件,回到第一界面 windowList = [] def closeEvent(self, event): the_window = FirstMainWindow() self.windowList.append(the_window) ##注:沒有這句,是不打開另一個主界面的! the_window.show() event.accept() ################################################ #######對話框 ################################################ class TestdemoDialog(QDialog): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('對話框') ### 設置對話框類型 self.setWindowFlags(Qt.Tool) ################################################ #######程序入門 ################################################ if __name__ == "__main__": app = QApplication(sys.argv) the_mainwindow = FirstMainWindow() the_mainwindow.show() sys.exit(app.exec_())
實現效果
點擊主界面按鈕后,二界面彈出,主界面此時依然在。
# 二界面
class SecondCode(QMainWindow, SecondUi.Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
SecondUi.Ui_MainWindow.__init__(self)
self.setupUi(self)
self.setWindowTitle('二界面')
self.setWindowIcon(QIcon('icon.png')) # 設置窗體標題圖標
self.button_opensecond.clicked.connect(button_opensecond_clicked)
打開 second 界面
windowList = [] # 窗口擴展數組
def button_opensecond_clicked(self):
the_window = SecondCode()
self.windowList.append(the_window) # 不可刪
the_window.show()
# ...
# 二界面的屬性和方法
# ...
菜單事件:
from PyQt5.QtWidgets import QApplication,QMainWindow,QAction from PyQt5.QtGui import QIcon #demo_7:菜單添加action以及狀態欄顯示消息 import sys class Example(QMainWindow): def __init__(self): self.app = QApplication(sys.argv) super().__init__() self.initUI() def initUI(self): action=QAction(QIcon('exit.png'),'&exit',self) #定義一個Action即動作 action.setStatusTip('Exit application')#狀態欄信息 action.triggered.connect(self.app.quit) #觸發事件動作為"關閉窗口" action.setShortcut('Ctrl+Q')#快捷鍵設置 self.statusBar()#狀態欄信 menu=self.menuBar() #當前窗體創建menuBar fmenu=menu.addMenu('&file') menu2 = self.menuBar() fmenu2 = menu2.addMenu('&test') #再添加一個menuBar fmenu.addAction(action) #為第一級別menu添加動作 self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Statusbar') self.show() if __name__=='__main__': e=Example() sys.exit(e.app.exec())