实例
- 创建基于Main Window模板窗口
- 右键移除菜单栏
- 在动作编辑器编辑动作,创建Circle,Rectangle,Line动作
- 添加图标icon选择已存在文件,或者新建一个.qrc文件,右侧添加.ico图标
- 主窗口右键添加工具栏TooBar,将编辑好的动作拖至工具栏
- 保存为demoToolBars.ui
- 使用pyuic生成demoToolBars.py
- 创建callToolBars.py
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QPainter
from cookbook_200505.demoToolBars import *
class AppWindow(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.pos1 = [0,0]
self.pos2 = [0,0]
self.toDraw=""
self.ui.actionCircle.triggered.connect(self.drawCircle)
self.ui.actionRectangle.triggered.connect(self.drawRectangle)
self.ui.actionLine.triggered.connect(self.drawLine)
self.show()
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
if self.toDraw=="rectangle":
width = self.pos2[0]-self.pos1[0]
height = self.pos2[1] - self.pos1[1]
qp.drawRect(self.pos1[0], self.pos1[1], width, height)
if self.toDraw=="line":
qp.drawLine(self.pos1[0], self.pos1[1],self.pos2[0], self.pos2[1])
if self.toDraw=="circle":
width = self.pos2[0]-self.pos1[0]
height = self.pos2[1] - self.pos1[1]
rect = QtCore.QRect(self.pos1[0], self.pos1[1],width, height)
startAngle = 0
arcLength = 360 *16
qp.drawArc(rect, startAngle, arcLength)
qp.end()
def mousePressEvent(self, event):
if event.buttons() & QtCore.Qt.LeftButton:
self.pos1[0], self.pos1[1] = event.pos().x(),event.pos().y()
def mouseReleaseEvent(self, event):
self.pos2[0], self.pos2[1] = event.pos().x(),event.pos().y()
self.update()
def drawCircle(self):
self.toDraw="circle"
def drawRectangle(self):
self.toDraw="rectangle"
def drawLine(self):
self.toDraw="line"
if __name__=="__main__":
app = QApplication(sys.argv)
w = AppWindow()
w.show()
sys.exit(app.exec())