IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】PyQt5 在窗口中使用自定义的QWidget,并重写paintEvent -> 正文阅读

[Python知识库]【Python】PyQt5 在窗口中使用自定义的QWidget,并重写paintEvent

一、成果图

在这里插入图片描述

预期效果:

在窗口中放置一个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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:32:52  更:2021-11-12 19:34:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/31 5:33:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码