• 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(1)-- 绘写文字


    【概览】

    本文实现如下的程序:(在窗体中绘画出文字

    主要步骤如下:

    1、在eric6中新建项目,新建窗体

    2、(自动打开)进入PyQt5 Desinger,编辑图形界面,保存

    3、回到eric 6,对上一步得到的界面文件 drawing.ui 文件右击,编译窗体,得到 Ui_drawing.py 文件

    4、然后再对 drawing.ui 文件右击,生成对话框代码,得到 drawing.py 文件。(在drawing.py中添加自己的程序逻辑

    5、py2exe打包成exe文件(此步略)

    【正文】

    接【概览】第4步:

    在 drawing.py 中,先准备要绘画的文本(self.text):

        def __init__(self, parent=None): 
            # ...
            self.text = 'u041bu0435u0432 u041du0438u043au043eu043bu0430
    u0435u0432u0438u0447 u0422u043eu043bu0441u0442u043eu0439: 
    
    u0410u043du043du0430 u041au0430u0440u0435u043du0438u043du0430'

    然后定义一个绘画事件:

        def paintEvent(self, event):
            ...

    所有的绘画都发生在此绘画事件内。给此绘画事件添加四行代码!

            qp = QtGui.QPainter()
            qp.begin(self)
            self.drawText(event, qp)#自定义的绘画方法
            qp.end()

    QtGui.QPainter类负责所有低级别的绘画。

    所有的绘画方法要放在 begin()end() 方法之间。当然,这里我们放的是自定义的drawText()方法

    上面代码合起来是这样的:

        def paintEvent(self, event):
            qp = QtGui.QPainter()
            qp.begin(self)
            self.drawText(event, qp)#自定义的绘画方法
            qp.end()

    后面的几篇关于绘画的文章中,上面这一坨代码几乎就不变了

    当然了,变的是自定义的drawText方法:

        def drawText(self, event, qp):
            qp.setPen(QtGui.QColor(168, 34, 3))#设置笔的颜色
            qp.setFont(QtGui.QFont('Decorative', 20))#设置字体
            qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)#画出文本

    最终的 drawing.py 是这样的:

    # -*- coding: utf-8 -*-
    
    """
    Module implementing Drawing.
    """
    import sys
    
    from PyQt5 import  QtGui, QtCore
    from PyQt5.QtWidgets import QDialog, QApplication
    
    from Ui_drawing import Ui_drawing
    
    
    class Drawing(QDialog, Ui_Drawing):
        def __init__(self, parent=None):
            super(Drawing, self).__init__(parent)
            self.setupUi(self)
            
            self.text = 'u041bu0435u0432 u041du0438u043au043eu043bu0430
    u0435u0432u0438u0447 u0422u043eu043bu0441u0442u043eu0439: 
    
    u0410u043du043du0430 u041au0430u0440u0435u043du0438u043du0430'
    
        def paintEvent(self, event):
            qp = QtGui.QPainter()
            qp.begin(self)
            self.drawText(event, qp)
            qp.end()
            
        def drawText(self, event, qp):
            qp.setPen(QtGui.QColor(168, 34, 3))
            qp.setFont(QtGui.QFont('Decorative', 20))
            qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        dlg = Drawing()
        dlg.show()
        sys.exit(app.exec_())
  • 相关阅读:
    如果int x=20, y=5,则语句System.out.println(x+y +""+(x+y)+y); 的输出结果是()
    子父类存在同名成员时super的使用条件
    7mysql高级查询
    1udp编程
    6mysql外键
    4mysql数据表增删改查
    5mysql数据类型
    3mysql数据库操作
    2mysql基本使用
    1mysql安装
  • 原文地址:https://www.cnblogs.com/hhh5460/p/4232883.html
Copyright © 2020-2023  润新知