pyqt5 主界面打開新主界面的實現


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())
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM