pyQt5-自定义控件
来源:互联网 发布:net snmp windows编程 编辑:程序博客网 时间:2024/06/05 12:39
参考:
1、https://maicss.gitbooks.io/pyqt5/content/
2、https://github.com/maicss/PyQt5-Chinese-tutoral
3、https://doc.qt.io/qt-5/classes.html API
自定义控件
PyQt5有丰富的组件,但是肯定满足不了所有开发者的所有需求,PyQt5只提供了基本的组件,像按钮,文本,滑块等。如果你还需要其他的模块,应该尝试自己去自定义一些。
自定义组件使用绘画工具创建,有两个基本方式:根据已有的创建或改进;通过自己绘图创建。
Burning widget
这个组件我们会在Nero,K3B,或者其他CD/DVD烧录软件中见到。
#!/usr/bin/python3# -*- coding: utf-8 -*-"""ZetCode PyQt5 tutorial In this example, we create a custom widget.本例中,我们使用了QSlider和一个自定义组件,由进度条控制。显示的有物体(也就是CD/DVD)的总容量和剩余容量。进度条的范围是1~750。如果值达到了700(OVER_CAPACITY),就显示为红色,代表了烧毁了的意思。Author: Jan BodnarWebsite: zetcode.com Last edited: August 2017"""from PyQt5.QtWidgets import (QWidget, QSlider, QApplication, QHBoxLayout, QVBoxLayout)from PyQt5.QtCore import QObject, Qt, pyqtSignalfrom PyQt5.QtGui import QPainter, QFont, QColor, QPenimport sysclass Communicate(QObject): updateBW = pyqtSignal(int)class BurningWidget(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setMinimumSize(1, 30) self.value = 75 self.num = [75, 150, 225, 300, 375, 450, 525, 600, 675] def setValue(self, value): self.value = value def paintEvent(self, e): qp = QPainter() qp.begin(self) self.drawWidget(qp) qp.end() def drawWidget(self, qp): MAX_CAPACITY = 700 OVER_CAPACITY = 750 font = QFont('Serif', 7, QFont.Light) qp.setFont(font) size = self.size() w = size.width() h = size.height() step = int(round(w / 10)) till = int(((w / OVER_CAPACITY) * self.value)) full = int(((w / OVER_CAPACITY) * MAX_CAPACITY)) if self.value >= MAX_CAPACITY: qp.setPen(QColor(255, 255, 255)) qp.setBrush(QColor(255, 255, 184)) qp.drawRect(0, 0, full, h) qp.setPen(QColor(255, 175, 175)) qp.setBrush(QColor(255, 175, 175)) qp.drawRect(full, 0, till-full, h) else: qp.setPen(QColor(255, 255, 255)) qp.setBrush(QColor(255, 255, 184)) qp.drawRect(0, 0, till, h) pen = QPen(QColor(20, 20, 20), 1, Qt.SolidLine) qp.setPen(pen) qp.setBrush(Qt.NoBrush) qp.drawRect(0, 0, w-1, h-1) j = 0 for i in range(step, 10*step, step): qp.drawLine(i, 0, i, 5) metrics = qp.fontMetrics() fw = metrics.width(str(self.num[j])) qp.drawText(i-fw/2, h/2, str(self.num[j])) j = j + 1class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): OVER_CAPACITY = 750 sld = QSlider(Qt.Horizontal, self) sld.setFocusPolicy(Qt.NoFocus) sld.setRange(1, OVER_CAPACITY) sld.setValue(75) sld.setGeometry(30, 40, 150, 30) self.c = Communicate() self.wid = BurningWidget() self.c.updateBW[int].connect(self.wid.setValue) sld.valueChanged[int].connect(self.changeValue) hbox = QHBoxLayout() hbox.addWidget(self.wid) vbox = QVBoxLayout() vbox.addStretch(1) vbox.addLayout(hbox) self.setLayout(vbox) self.setGeometry(300, 300, 390, 210) self.setWindowTitle('Burning widget') self.show() def changeValue(self, value): self.c.updateBW.emit(value) self.wid.repaint()if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
阅读全文
0 0
- pyQt5-自定义控件
- PyQt5教程-22-自定义控件
- PyQt5教程(十)——自定义控件
- PyQt5中文基础教程11 自定义控件
- pyQt5-控件1
- pyQt5-控件2
- python3+PyQt5 自定义视图
- PyQt5系列教程(七)控件
- PyQt5教程-15-日历控件
- 用pyqt5创建简单控件
- Pyqt5系列(八)-自定义信号
- PyQt5
- pyqt5
- PyQt5:控件的基本属性(2)
- PyQt5教程-13-滑块控件
- PyQt5教程(六)——控件
- PyQt5教程(七)——控件(II)
- PyQt5中文基础教程7 控件1
- Maximum Subarray
- ios11 Handheld.PlayFullScreenMovie播视频不能跳过
- LINUX基础命令
- Android 自带阻尼效果的ScrollView,仿ios效果
- boundingbox回归
- pyQt5-自定义控件
- zookeeper学习记录-04 Zookeeper安装(linux系统,伪集群)
- C3P0连接池使用教程
- java 模拟post请求
- linux下php+nginx+mysql网站开发环境搭建
- restful api best practice
- 关于 python ImportError: No module named 的问题
- Frida官方手册
- 如何修改自动同步数据的默认开关