栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python学习之pyside2

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python学习之pyside2

python qt之pyside2

文章目录
  • python qt之pyside2
    • 1、常见的组件的使用
      • 这个教程写的很详细[http://www.byhy.net/tut/py/gui/qt_05_1/](http://www.byhy.net/tut/py/gui/qt_05_1/)
    • 2、layout布局的设计
      • 布局思路:
    • 3、重写paintEvent(self, event)方法实现画图(画点或者画线等一些简单的操作)
        • 绘制的自动触发机制条件如下:
        • 绘制的"手动"触发机制:使用update()或者repaint()进行重绘

1、常见的组件的使用 这个教程写的很详细http://www.byhy.net/tut/py/gui/qt_05_1/ 2、layout布局的设计 布局思路:
def __init__(self):
    super(all_function_test, self).__init__()
    self.setting_widget = SettingsWidget()
    self.setStyleSheet('font: 16px Microsoft YaHei')
    
    self.btn_new = QPushButton('举个例子')
    self.btn_new.clicked.connect(self.example)
    self.btn_new.setFixedSize(120, 30)

    vbox = QVBoxLayout()						# 需要创建一个布局用来装载组件(QVBoxLayout垂直布局,QHBoxLayout水平布局),布局之间可以嵌套
    vbox.addWidget(self.btn_new, 0, Qt.AlignCenter) # 加入组件

    self.setLayout(vbox)							# 设置主窗口的布局
    self.exec()										# 使用exec来动态加载模块
3、重写paintEvent(self, event)方法实现画图(画点或者画线等一些简单的操作)
from PySide2 import QtWidgets
from PySide2.QtCore import Qt, QRect, QPoint, Signal
from PySide2.QtGui import QPainter, QBrush, QColor, QPen, QPixmap
from PySide2.QtWidgets import QWidget
import sys
import random


class PointWindow(QWidget):
    def __init__(self):
        super(PointWindow, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.resize(200, 200)

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)

        # 绘图的方法就写在这里就好,begin与end之间
        self.drewDot(qp)

        qp.end()

    def drewDot(self, qp):
        pen = QPen(QColor(238, 0, 0), 3)
        qp.setPen(pen)  # 对画笔进行设置,QColor参数为颜色的rgb值,后面3为点的大小
        print(self.size())  # 确认下能画画的画布像素范围
        # 随机画几个点
        for i in range(20):
            # drawPoint的参数有两个,一个是点的横坐标,一个是点的纵坐标
            qp.drawPoint(random.randint(0, 199), random.randint(0, 199))

def main():
    app = QtWidgets.QApplication(sys.argv)
    point = PointWindow()
    point.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

运行效果:

# 画线
'''
天依蓝 #66ccff 102,204,255
初音绿 #66ffcc 102,255,204
言和绿 #99ffff 153,255,255
阿绫红 #ee0000 238,0,0
双子黄 #ffff00 255,255,0
'''
from PySide2 import QtWidgets
from PySide2.QtCore import Qt, QRect, QPoint, Signal
from PySide2.QtGui import QPainter, QBrush, QColor, QPen, QPixmap
from PySide2.QtWidgets import QWidget
import sys
import random


class PointWindow(QWidget):
    def __init__(self):
        super(PointWindow, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.resize(200, 200)

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)

        # 绘图的方法就写在这里就好,begin与end之间
        self.drewLines(qp)

        qp.end()

    def drewLines(self, qp):
        pen = QPen(QColor(238, 0, 0), 2, Qt.SolidLine)
        qp.setPen(pen)  # 对画笔进行设置,QColor参数为颜色的rgb值,后面2为线的宽,Qt.SolidLine是线的种类
        print(self.size())  # 确认下能画画的画布像素范围
        # 随机画几个线段
        for i in range(5):
            # 四个参数分别是横坐标的起始位置,纵坐标的起始位置,横坐标的最终位置,纵坐标的最终位置
            qp.drawLine(random.randint(0, 199), random.randint(0, 199), random.randint(0, 199),
                        random.randint(0, 199))

def main():
    app = QtWidgets.QApplication(sys.argv)
    point = PointWindow()
    point.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

效果图:

绘制的自动触发机制条件如下:
  1. 窗口第一次显示时
  2. 窗口大小调整时
  3. 窗口切换或遮挡

以上操作,系统会自动产生一个绘图事件,强制这个paintEvent的运行,利用这个机制可以做适当的处理

绘制的"手动"触发机制:使用update()或者repaint()进行重绘
  1. repaint()函数会强制产生一个即时的重绘事件;
  2. update()函数只是在Qt下一次处理事件时才调用一次绘制事件

多次调用update(),Qt会把连续多次的绘制事件压缩成一个单一的绘制事件,这样可避免闪烁现象。

所以建议在需要重绘的时候尽量使用update(),在必须实时显示绘制的时候使用repaint()

补充一点:我在做项目的时候,偶然发现只要paintEvent事件被阻塞导致每秒不触发的话,窗口就会闪退这个问题。所以一定不能阻塞这个事件。

未完待续……

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588532.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号