在PyQt5中的選單欄和工具欄
在這一部分,我們學習建立狀態列,選單欄和工具欄。一個選單是位於選單欄的一組命令。一個工具欄有一些按鈕,這些按鈕在應用程式中擁有一些常用命令。狀態列顯示狀態資訊,通常位於應用視窗下方。
QMainWindow
QMainWindow
類提供了一個主應用視窗。這允許我們建立一個帶有狀態列,工具欄和選單欄的經典程式框架。
Statusbar(狀態列)
一個狀態列是用於顯示狀態資訊的一個元件。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage("Ready")
self.setGeometry(300,300,250,150)
self.setWindowTitle("StatusBar")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
狀態列在QMainWindow
元件的幫助下被建立。
self.statusBar().showMessage("Ready")
為了獲取狀態列,我們呼叫類QtGui.QMainWindow
的statusBar()
方法。該方法的第一個呼叫建立一個狀態列。子序列呼叫返回狀態列物件。showMessage()
展示在狀態列上的資訊。
下面是這個小例子程式的執行結果:
簡單的選單
選單欄是GUI應用程式的通用元件。他是一組位於多個選單的命令。(Mac OS以不同的方式對待選單欄。為了獲得相似的輸出,我們可以新增下列一行:menubar.setNativeMenubar(False)
。)
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow,QAction, QApplication, qApp
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)
exitAct.setShortcut('Ctrl+Q')
exitAct.setStatusTip("Exit application")
exitAct.triggered.connect(qApp.quit)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu("&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_())
在上面的例子程式中,我們建立了一個帶有一個選單的選單欄。這個選單包含一個動作,如果選中的話,將會終止該應用程式。當然,也建立了一個狀態列。這個動作也可以使用Ctrl+Q
快捷鍵。
exitAct = QAction(QIcon("exit.png"),"&Exit",self)
exitAct.setShortcut("Ctrl+Q")
exitAct.setStatusTip("Exit application")
QAction
是一個執行在選單欄,工具欄和定製鍵盤快捷鍵的抽象類。在上面三行中,我們使用特定的圖示和一個’Exit’標籤建立了一個行為。進一步說,一個快捷鍵為了這個行為被定義。第三行建立了一個狀態提示,當滑鼠經過該選單選項的時候,被顯示在狀態列上。
exitAct.triggered.connect(qApp.quit)
當我們選中這個特定的行為的時候,一個觸發的訊號被提交。該訊號被連線到QApplication
元件的quit()
方法。這個會終止這個程式。
menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAct)
menuBar()
方法建立了一個選單欄。我們使用addMenu()
建立了一個檔案按鈕,並且使用addAction()
方法新增一個行為。
下面是該小例子的截圖:
![enter description here][2
子選單
一個子選單是位於另外一個選單中的一個選單。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
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)
impAct = QAction("Import mail",self)
impMenu.addAction(impAct)
newAct = QAction("New", self)
fileMenu.addAction(newAct)
fileMenu.addMenu(impMenu)
self.setGeometry(300,300,300,200)
self.setWindowTitle("Submenu")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
在這個例子中,我們有兩個選單選項;一個位於檔案選單中,另一個位於檔案的Import子選單中。
impMenu = QMenu("Import", self)
新的選單使用QMenu
建立。
impAct = QAction("Import mail", self)
impMenu.addAction(impAct)
一個行為通過使用addAction()
被新增到子選單中。
選項選單
在下面的例子中,我們建立了一個按鈕可以被選中或者是不被選中。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QAction
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)
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_())
這個程式碼例子建立了帶有一個行為的檢視選單。這個行為顯示或者是隱藏狀態列。當狀態列可視的時候,選單選項被選中。
viewStatAct = QAction('View statusbar', self, checkable=True)
使用checkable
選項,我們建立了一個可選擇選單。
viewStatAct.setChecked(True)
因為狀態列在一開始的時候是可視的,我們使用setChecked()
方法來設定該行為。
def toggleMenu(self, state):
if state:
self.statusbar.show()
else:
self.statusbar.hide()
依賴於行為選中的狀態,我們設定狀態列是否顯示。
上下文選單
一個上下文選單,也被稱作彈出選單,一個出現在一些上下文中的一個命令列表。例如,在一個Opera網頁瀏覽器中,當你在一個網頁中右擊的時候,我們獲得一個上下文選單。在這裡我們可以重新載入一個頁面,回退,或者是檢視頁面原始碼。如果我們右擊一個工具欄,我們將會得到管理工具欄的另一個上下文選單。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
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_())
為了能夠使用上下文選單,我們必須重新整合contextMenuEvent()
方法。
action = cmenu.exec_(self.mapTpGlobal(event.pos()))
該上下文選單被exec_()
方法顯示。他們從事件物件中獲得滑鼠指標的座標。mapToGlobal()
方法傳遞元件的座標到全域性的螢幕座標。
if action == quitAct:
qApp.quit()
如果從上下文選單返回的行為等於退出行為,則程式被終止。
工具欄
在一個應用程式中,選單欄組織了所有的命令。工具欄提供了常用命令的快速訪問途徑。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
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)
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_())
在上面的例子中,我們建立了一個簡單的工具欄。工具欄有一個工具行為,一個退出行為,當觸發的時候終止程式。
exitAct = QAction(QIcon("exit.png"),"Exit",self)
exitAct.setShortcut("Ctrl+Q")
exitAct.triggered.connect(qApp.quit)
和上面例子中的選單欄一樣,我們建立了一個行為物件。該物件有一個標籤,圖示和一個快捷方式。Qt.QMainWindow
中的一個quit()
方法被連線到觸發訊號中。
self.toolbar = self.addToolBar("Exit")
self.toolbar.addAction(exitAct)
工具欄被addToolBar()
被建立。我們使用addAction()
方法新增一個行為物件到工具欄中。
把他們放到一起
在最後一個例子中,我們將會建立一個選單欄,工具欄和一個狀態列。我們也將會建立一箇中心的元件。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction,QApplication
from PyQt5.QtGui import QIcon
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
textEdit = QTextEdit()
self.setCentralWidget(textEdit)
exitAct = QAction(QIcon("exit.png"),"Exit",self)
exitAct.setShortcut("Ctrl+Q")
exitAct.setStatusTip("Exit application")
exitAct.triggered.connect(self.close)
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu("&File")
fileMenu.addAction(exitAct)
toolbar = self.addToolBar("Exit")
toolbar.addAction(exitAct)
self.setGeometry(300,300,350,250)
self.setWindowTitle("Main Window")
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
在這裡,我們建立了一個文字編輯元件。我們也把它設定成為QMainWindow
的中心元件。中心元件被分為剩餘空間的所有空間。
在這篇文章中,我們學習了選單欄,工具欄和狀態列,還有一個主程式視窗。
相關推薦
在PyQt5中的選單欄和工具欄
在這一部分,我們學習建立狀態列,選單欄和工具欄。一個選單是位於選單欄的一組命令。一個工具欄有一些按鈕,這些按鈕在應用程式中擁有一些常用命令。狀態列顯示狀態資訊,通常位於應用視窗下方。 QMainWindow QMainWindow類提供了一個主應用視窗。
【PyQt5 學習記錄】005:QMainWindow 及狀態欄、菜單欄和工具欄
qt5 open file statusbar ati etc con bubuko import 1 #!/usr/bin/env python 2 3 import sys 4 from PyQt5.QtWidgets import (QApplic
Qt學習(3)——選單欄和工具欄
0、建立專案: 前面步驟一樣,到下圖基類換一下: 1、選單欄 標頭檔案: 一些函式原型宣告: void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orient
VC++單文件程式固定選單欄和工具欄
MainFrm.cpp框架類下,找到OnCreate方法 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(
QT中選單Menu與工具欄Toolbar中各個Action的動態新增刪除
就像Swing裡面的Action一樣,Qt裡面也有一個類似的類,叫做QAction。顧名思義,QAction類儲存有關於這個動作,也就是action的資訊,比如它的文字描述、圖示、快捷鍵、回撥函式(也就是訊號槽),等等。神奇的是,QAction能夠根據新增的位置來改變自己的
(轉)IE瀏覽器的選單欄和工具欄原理
1、最基本的彈出視窗程式碼】 其實程式碼非常簡單: <SCRIPT LANGUAGE="javascript"> <!-- window.open ('page.html') --> </SCRIPT> 因為這是一段javas
福昕閱讀器不顯示選單欄和工具欄
問題: 在使用福昕閱讀器的過程中,突然發現選單欄和工具欄都沒有了,甚至連滾動條都沒了,怎麼辦呢?點哪個地方都沒有右鍵選單可以把選單欄和工具欄調處理。 解決: 解決辦法其實很簡單,只需要按F9,選單就又
Qt5 選單欄和工具欄的使用
選單欄 // 新建一個選單A QMenu* pMenuA = new QMenu("&qzher"); // q則為Alt方式的快捷鍵,&表示可以使用快捷鍵 // 新建
Mac 將窗口的標題欄和工具欄合並
clas 標題欄 util light appear 通過 log false window 主要是通過設置屬性實現。 下面的是基於Qt的代碼,同時不顯示窗口標題和icon。 void MacUtils::CreateCocoaContianerForWindow(QWi
[Xcode10 實際操作]三、視圖控制器-(4)使用UINavigationController導航欄和工具欄
根視圖 xcod code height 頂部 lec 顏色 image 插入 本文將演示如何顯示和隱藏導航視圖的導航欄和工具欄 打開第一個視圖控制器 1 import UIKit 2 3 class FirstSubViewController: UI
PyQt5學習記錄(2)---QMainWindow選單欄、狀態列和工具欄
QMainWindow是繼承自QWidget,提供一個應用程式的主視窗。通過QMainWindow你可以新增自己的QToolBars、QDockWidgets、QMenuBar、QStatusBar等。見下圖: 所以如果我們寫程式的話,主視窗一般都是繼承QMainWind
pyqt5 -——選單和工具欄
一. 狀態列 # -*- coding: utf-8 -*-# @Time : 2018/12/22 12:37# @Author : Bo# @Email : [email protected]# @File : demo3.py# @Software: PyCharmimpo
pyQt5-選單和工具欄
參考: 1、https://maicss.gitbooks.io/pyqt5/content/ 2、https://github.com/maicss/PyQt5-Chinese-tutoral 3、https://doc.qt.io/qt-5/classes.html
選單和工具欄
選單: 選單包括選單欄(wx.MenuBar)、選單(wx.Menu)和選單項(wx.MenuItem) 選單欄不新增到父視窗,需要在頂級視窗中通過SetMenuBar(menuBar)方法新增。選單欄(wx.MenuBar)通過Append(menu,title)方法將選單新增到選單欄中
C#選單和工具欄之contextMenuStrip、menuStrip、statusStrip、toolStrip和toolStripContainer
1、contextmenustrip:上下文選單(滑鼠右鍵選單) 2、menustrip:普通(窗體)選單 3、statusStrip狀態列 4、toolStrip工具欄,可匯入ico圖示 5、ToolStripContainer 這個控制元件其實很有意思,網上資料確
winform控制元件縮寫(三)選單和工具欄
winform控制元件縮寫(三)選單和工具欄 序號 縮寫 空間名 1 cms ContextMenuStrip 2 mns
C#-WinForm-選單和工具欄
C#-WinForm-選單和工具欄 通用屬性: Enabled - 指示是否啟用該控制元件。 Visiable - 確定該控制元件是啟用還是隱藏的。 Checked - 指示元件是否處於選中狀態。 點選事件。 工具箱→選單和工具欄 1、Context
QtCreator 應用程式主視窗——選單欄(QMenuBar)和工具欄(QToolBar)
1.選單欄(QMenuBar)和工具欄(QToolBar) 1.1 將選單項放在工具欄上面:將Action編輯器中的相應動作直接拖到工具欄上面 1.2 使用資源:新增資原始檔->Qt資原始檔-&g
【PyQt503】選單和工具欄
選單和工具欄 選單式位於選單欄的一組命令操作。工具欄是應用窗體中由按鈕和一些常規命令操作組成的元件。 主視窗 QMainWindow類提供了一個應用主視窗。預設建立一個擁有狀態列、工具欄和選單欄的經典應用視窗骨架。 狀態列 狀態列是用來顯示狀態資訊的元件。 im
在mfc中,如何設定一個隱藏選單欄,工具欄,狀態列,最大化、最小化、關閉按鈕的窗體 分類: MFC
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // 去掉標題欄 /* i