一、成果图
预期效果:
在窗口中放置一个QWidget,用于画图(使用QPainter),其余位置可以放置别的控件。
二、自定义QWidget类
自定义一个QWidget类,编写绘制的函数
class Drawing(QWidget):
def __init__(self, parent=None):
super(Drawing, self).__init__(parent)
self.setWindowTitle("QPainter测试")
self.setMinimumSize(600, 200)
def drawTitle(self, painter):
...
def drawColorPie(self, painter):
...
def drawPointerIndicator(self, painter):
...
def drawLine(self, painter):
...
...
...
三、重写paintEvent
进行坐标变换后可以开始调用painter画笔进行绘画:painter.begin()
def paintEvent(self, event):
width = self.width()
height = self.height()
painter = QPainter(self)
painter.translate(width / 2, height / 2)
side = min(width, height)
painter.scale(side / 200.0, side / 200.0)
painter.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing)
painter.begin(self)
self.drawColorPie(painter)
self.drawPointerIndicator(painter)
self.drawText(painter)
self.drawTitle(painter)
...
...
四、在窗口中使用
1、导入自定义类
在需要显示该Widget的主窗口中导入自定义的类:from test.dashboardTest import Drawing
2、添加自定义类
声明类,并且设置其在主窗口中的布局位置等信息。
self.simulationView = Drawing()
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.simulationView.sizePolicy().hasHeightForWidth())
self.simulationView.setSizePolicy(sizePolicy)
self.simulationView.setObjectName("simulationView")
self.gridLayout_chart.addWidget(self.simulationView, 0, 2, 1, 1)
3、运行主窗口
运行主窗口后就可以看到QWidget和其他控件一起的效果
if __name__ == "__main__":
app = QApplication(sys.argv)
view = MainWindow()
view.show()
sys.exit(app.exec_())
将QWidget与主窗口分离的好处是可以单独控制每个控件的显示状态,不互相耦合。通过self.simulationView.setVisible(False) 设置该部分的是否可见。这样就可以结合按钮,改变主窗口的显示内容。
五、仪表盘制作
【Python】PyQt5 使用QPainter绘制简易仪表盘 参考: https://blog.csdn.net/asszpdhpg/article/details/99301109?spm=1001.2014.3001.5501 https://www.cnblogs.com/wangmantou/p/11662779.html
|