天天看點

PYQT5 三、QMainWindow

一、 QMainWindow menu
           

建立了一個File菜單欄, 其中包含一個菜單。此菜單将包含一個Exit操作, 如果選擇該操作将終止應用程式。還将建立狀态欄。可以使用 Ctrl Q 快捷方式通路該操作。

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon


class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        exitAct = QAction(QIcon('exit.png'), '&Exit', self)  #QAction 建立一個按鈕、一個圖示、一個Exit标簽、
        exitAct.setShortcut('Ctrl+Q')  # 定義一個快捷鍵。
        exitAct.setStatusTip('Exit application') #第三行建立一個狀态提示當我們将滑鼠指針懸停在菜單項時,狀态欄所示。
        exitAct.triggered.connect(qApp.quit)  # 按鈕觸發qApp結果

        self.statusBar().showMessage('Ready') # 建立一個狀态欄,并在狀态欄顯示Ready

        menubar = self.menuBar()     #建立一菜單欄
        fileMenu = menubar.addMenu('&File')  菜單欄裡建立一個File菜單
        fileMenu.addAction(exitAct)   #菜單裡建立了一個按鈕。

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Simple menu')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
           

二、 建立子菜單項

在該示例中,有兩個菜單項。

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QMenu, QApplication

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):         
        
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('File')
        
        impMenu = QMenu('Import', self)  #QMenu 建立一個菜單
        impAct = QAction('Import mail', self) # 建立按鈕
        impMenu.addAction(impAct)    # 在Import子菜單裡添加Import mail按鈕
        
        newAct = QAction('New', self)        
        
        fileMenu.addAction(newAct)  #在File菜單下添加New 按鈕
        fileMenu.addMenu(impMenu)    #在File菜單下添加子菜單Import
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Submenu')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
           

三、 viewMenu

建立一個視圖菜單。該按鈕顯示或隐藏狀态欄, 當狀态欄是可見的,該按鈕被選中。

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QApplication

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):         
        
        self.statusbar = self.statusBar()
        self.statusbar.showMessage('Ready')
        
        menubar = self.menuBar()
        viewMenu = menubar.addMenu('View')
        
        viewStatAct = QAction('View statusbar', self, checkable=True)  # 建立一個可選按鈕View statusbar, checkable開啟是否可選。
        viewStatAct.setStatusTip('View statusbar')   #在狀态欄顯示
        viewStatAct.setChecked(True)    #初始狀态為已選中
        viewStatAct.triggered.connect(self.toggleMenu)
        
        viewMenu.addAction(viewStatAct)
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Check menu')    
        self.show()
        
    def toggleMenu(self, state):
        
        if state:
            self.statusbar.show()
        else:
            self.statusbar.hide()   #我們顯示或隐藏狀态欄。
       
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
           

四、彈出式菜單

請在框體上單擊右鍵,會彈出菜單。

import sys
from PyQt5.QtWidgets import QMainWindow, qApp, QMenu, QApplication

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):         
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Context menu')    
        self.show()
    
    
    def contextMenuEvent(self, event):
       
           cmenu = QMenu(self)
           
           newAct = cmenu.addAction("New")
           opnAct = cmenu.addAction("Open")
           quitAct = cmenu.addAction("Quit")
           action = cmenu.exec_(self.mapToGlobal(event.pos()))  #擷取系統滑鼠指針位置,在滑鼠指針處右鍵彈出窗體
           
           if action == quitAct:
               qApp.quit()
       
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())      

五、建立工具條

import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
from PyQt5.QtGui import QIcon

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):               
        
        exitAct = QAction(QIcon('exit24.png'), 'Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.triggered.connect(qApp.quit)
        
        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAct)
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Toolbar')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())