在窗口中放置一个QWidget,用于画图(使用QPainter),其余位置可以放置别的控件。
二、自定义QWidget类自定义一个QWidget类,编写绘制的函数
class Drawing(QWidget): def __init__(self, parent=None): super(Drawing, self).__init__(parent) self.setWindowTitle("QPainter测试") self.setMinimumSize(600, 200) # self.setMaximumSize(700, 700) # self._title = '预计可用 年' def drawTitle(self, painter): ... def drawColorPie(self, painter): ... def drawPointerIndicator(self, painter): ... def drawLine(self, painter): ... ... ...三、重写paintEvent
进行坐标变换后可以开始调用painter画笔进行绘画:painter.begin()
def paintEvent(self, event): # 坐标轴变换 默认640*480 width = self.width() height = self.height() painter = QPainter(self) # 初始化painter painter.translate(width / 2, height / 2) # 坐标轴变换,调用translate()将坐标原点平移至窗口中心 # 坐标刻度自适应 side = min(width, height) painter.scale(side / 200.0, side / 200.0) # 本项目中将坐标缩小为side/200倍,即画出length=10的直线,其实际长度应为10*(side/200)。 # 启用反锯齿,使画出的曲线更平滑 painter.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing) painter.begin(self) # 调用编写过的函数进行paint *** 作 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) # self.simulationView.setVisible(False)3、运行主窗口
运行主窗口后就可以看到QWidget和其他控件一起的效果
if __name__ == "__main__": app = QApplication(sys.argv) view = MainWindow() # ChildWindow = ChildWin() 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)