QMenu:該類提供了一個可添加菜單欄的控件,也可用於創建上下文菜單和彈出菜單。每個QMenu對象可以包含一個或多個QAction對象或者級聯的QMenu對象。
創建一個彈出窗口,createPopupMenu()函數,menuBar()函數用於返回主窗口的QMenuBar對象。
addMenu()函數可以將菜單添加到菜單欄。addAction()函數可以在菜單中添加操作。
常用方法
menuBar() |
返回主窗口的QMenuBar對象 |
addMenu() |
在菜單欄添加一個新的QMenu對象 |
addAction() |
向QMenu控件中添加一個操作按鈕,包含文本、圖案 |
setEnable() |
將操作按鈕狀態設置爲啓用、禁用 |
addSeperator() |
在菜單中添加一條分割線 |
clear() |
刪除菜單/菜單欄的內容 |
setShortcut() |
將快捷鍵關聯到按鈕 |
setText() |
設置菜單項文本 |
setTitle() |
設置QMenu控件標題 |
text() |
返回與QAction對象關聯的文本 |
title() |
返回QMenu控件標題 |
#QMenuBar菜單欄實例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MenuDemo(QMainWindow):
def __init__(self,parent=None):
super(MenuDemo, self).__init__(parent)
layout=QHBoxLayout()
bar=self.menuBar() #創建一個菜單欄
file=bar.addMenu("File") #菜單欄中添加一個菜單功能File
file.addAction("New") #File功能中添加一個Action動作 名稱爲New
save=QAction("Save",self) #創建一個Action動作 名稱爲Save
save.setShortcut("Ctrl+S") #爲該動作添加一個快捷鍵 ctrl + s
file.addAction(save) #File功能中添加一個名稱爲Save 的 Action動作,即上述對象
edit=file.addMenu("Edit") #File功能中添加一個名稱爲 Edit 的 菜單
edit.addAction("copy") #爲Edit添加兩個action動作 copy paste
edit.addAction("paste")
quit=QAction("Quit",self) #File功能中添加一個名稱爲Quit 的 Action動作
file.addAction(quit)
file.triggered[QAction].connect(self.processtrigger)
self.setLayout(layout)
self.setWindowTitle("menu 例子")
def processtrigger(self,q):
print(q.txt()+" is triggered")
if __name__=="__main__":
app=QApplication(sys.argv)
demo=MenuDemo()
demo.show()
sys.exit(app.exec_())
QToolBar:該控件由文本按鈕、圖標或其他小按鈕組成的可移動面板,一般位於菜單欄下方
常用方法
addAction() |
添加具有文本和圖標的工具按鈕 |
addSeperator() |
分組顯示工具按鈕 |
addWidget() |
添加工具欄中按鈕以外的控件 |
addToolBar() |
使用QMainWindow類的方法添加一個新的工具欄 |
setMoveable() |
工具欄變得可移動 |
setOrientation() |
工具欄的方向設置爲Qt.Horizontal 或 Qt.Vertical |
#QToolBar菜單欄實例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ToolParDemo(QMainWindow):
def __init__(self):
super(ToolParDemo, self).__init__()
self.setWindowTitle("toolbar例子")
self.resize(300,200)
layout=QVBoxLayout()
tb=self.addToolBar("File") #創建一個ToolBar
new=QAction(QIcon("../images/new.png"),"new",self) #創建一個Action
tb.addAction(new) #爲ToolBar添加一個Action
open=QAction(QIcon("../images/open.png"),"open",self)
tb.addAction(open)
save=QAction(QIcon("../images/save.png"),"save",self)
tb.addAction(save)
tb.actionTriggered[QAction].connect(self.toolbtnpressed)
self.setLayout(layout)
def toolbtnpressed(self,a):
print("pressed tool button is",a.text())
if __name__=="__main__":
app=QApplication(sys.argv)
demo=ToolParDemo()
demo.show()
sys.exit(app.exec_())
QStatusBar:該控件爲MainWindow對象在底部留有的一個水平線,叫做狀態欄,用於顯示永久的或臨時的狀態信息
常用方法
addWidget() |
在狀態添加給定的窗口小控件 |
addPermancentWidget() |
在狀態欄中永久添加給指定的窗口小控件 |
showMessage() |
在狀態欄顯示一條臨時信息指定時間間隔 |
clearMessage() |
刪除正在顯示的臨時信息 |
removeWidget() |
從狀態欄刪除指定控件 |
#QStatusBar狀態欄實例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class StatusDemo(QMainWindow):
def __init__(self):
super(StatusDemo, self).__init__()
bar=self.menuBar()
file=bar.addMenu("File")
file.addAction("show")
file.triggered[QAction].connect(self.processTrigger)
self.setCentralWidget(QTextEdit())
self.statusBar=QStatusBar()
self.setWindowTitle("QStatusBar 例子")
self.setStatusBar(self.statusBar)
def processTrigger(self,q):
if (q.text() == "show"):
self.statusBar.showMessage(q.text()+"菜單選項被點擊",5000)
if __name__=="__main__":
app=QApplication(sys.argv)
demo=StatusDemo()
demo.show()
sys.exit(app.exec_())
- QPrinter:該控件是打印圖像,圖像軟件處理中的一個常用功能。本質上是一個QPaintDevice設備
#QPrinter打印圖像實例
# -*- coding: utf-8 -*-
import sys,math,os
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtPrintSupport import QPrinter,QPrintDialog
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle(self.tr("打印圖像"))
self.imageLabel=QLabel()
self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)
self.setCentralWidget(self.imageLabel)
self.image=QImage()
self.createActions()
self.CreateMenus()
self.CreateToolBars()
ret=self.image.load("../images/screen.jpg")
if ret:
self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
self.resize(self.image.width(),self.image.height())
def CreateMenus(self):
PrintMenu=self.menuBar().addMenu(self.tr("打印")) #在QMainWindow中的菜單欄添加一個打印菜單,
PrintMenu.addAction(self.PrintAction) #爲菜單添加功能Action
def createActions(self):
self.PrintAction=QAction(QIcon("../images/printer.jpg"),self.tr("打印"),self) #爲Action設置圖像,
self.PrintAction.setShortcut("Ctrl+P") #爲Action設置快捷鍵
self.PrintAction.setStatusTip(self.tr("打印")) #爲Action設置狀態提示,鼠標放在圖標上顯示提示“打印”
self.PrintAction.triggered.connect(self.slotPrint)
def CreateToolBars(self):
fileToolBar=self.addToolBar("Print") #添加一個狀態欄 Print
fileToolBar.addAction(self.PrintAction) #爲狀態欄添加Action
def slotPrint(self):
printer=QPrinter()
printDialog=QPrintDialog(printer,self)
if printDialog.exec_():
painter=QPainter(printer,self)
rect=painter.viewport()
size=self.image.size()
size.scale(rect.size(),Qt.KeepAspectRatio)
painter.setViewport(rect.x(),rect.y(),size.width(),size.height())
painter.setWindow(self.image.rect())
painter.drawImage(0,0,self.image)
if __name__=="__main__":
app=QApplication(sys.argv)
demo=MainWindow()
demo.show()
sys.exit(app.exec_())