【概览】

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

主要步骤如下:

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):

  1. def __init__(self, parent=None):
  2. # ...
  3. self.text = '\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\
  4. \u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\
  5. \u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430'

然后定义一个绘画事件:

  1. def paintEvent(self, event):
  2. ...

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

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

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

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

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

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

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

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

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

最终的 drawing.py 是这样的:

  1. # -*- coding: utf-8 -*-
  2.  
  3. """
  4. Module implementing Drawing.
  5. """
  6. import sys
  7.  
  8. from PyQt5 import QtGui, QtCore
  9. from PyQt5.QtWidgets import QDialog, QApplication
  10.  
  11. from Ui_drawing import Ui_drawing
  12.  
  13. class Drawing(QDialog, Ui_Drawing):
  14. def __init__(self, parent=None):
  15. super(Drawing, self).__init__(parent)
  16. self.setupUi(self)
  17.  
  18. self.text = '\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\
  19. \u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\
  20. \u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430'
  21.  
  22. def paintEvent(self, event):
  23. qp = QtGui.QPainter()
  24. qp.begin(self)
  25. self.drawText(event, qp)
  26. qp.end()
  27.  
  28. def drawText(self, event, qp):
  29. qp.setPen(QtGui.QColor(168, 34, 3))
  30. qp.setFont(QtGui.QFont('Decorative', 20))
  31. qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)
  32.  
  33. if __name__ == '__main__':
  34. app = QApplication(sys.argv)
  35. dlg = Drawing()
  36. dlg.show()
  37. sys.exit(app.exec_())

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

  1. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列01)--Hello world!

    [题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...

  2. 用 eric6 与 PyQt5 实现python的极速GUI编程(35篇PyQT和200多篇Python)

    [题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...

  3. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列04)---- PyQt5自带教程:地址簿(address book)

    [引子] 在PyQt5自带教程中,地址簿(address book)程序没有完全实现界面与业务逻辑分离. 本文我打算用eric6+PyQt5对其进行改写,以实现界面与逻辑完全分离. [概览] 1.界面 ...

  4. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(2)-- 画点

    [概览] 本文实现如下的程序:(在窗体中绘画出[-100, 100]两个周期的正弦函数图像) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编 ...

  5. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列02)---- 省市县(区)下拉列表多级联动

    [概览] 本文实现如下的程序: 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到eric 6,对上一步得到的界面文件 ...

  6. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(3)-- 画线

    [概览] 本文实现如下的程序:(在窗体中绘画出各种不同风格的线条) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到 ...

  7. python基础知识-GUI编程-TK-StringVar

    1.如何引出StringVar 之前一直认为StringVar就是类似于Java的String类型的对象变量,今天在想要设置StringVar变量的值的时候,通过搜索发现StringVar并不是pyt ...

  8. Python gui编程pyQt5安装步骤t

    Python gui编程pyQt5安装步骤         pip install PyQt5 Pip3 install PyQt5               https://riverbankco ...

  9. Python gui编程pyQt5安装步骤

    Python gui编程pyQt5安装步骤 =============================== -m PyQt5.uic.pyuic  $FileName$ -o $FileNameWit ...

随机推荐

  1. OC中的复合

    #import <Foundation/Foundation.h> #import "Car.h" int main(int argc, const char * ar ...

  2. android 进程/线程管理(四)----消息机制的思考(自定义消息机制)

    关于android消息机制 已经写了3篇文章了,想要结束这个系列,总觉得少了点什么? 于是我就在想,android为什么要这个设计消息机制,使用消息机制是现在操作系统基本都会有的特点. 可是andro ...

  3. 最新Burpsuite Pro v1.7.03 介绍和破解版下载

    0x00 介绍 Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP 消息, ...

  4. 阿里云ECS/Ubuntu下JDK、Tomcat、MySQL安装记录

    今天六一儿童节,然后... ... ... ... 然后就是父亲节呀孩子们!!! ———————————————————————割———————————————————————— 同事需要JDK.To ...

  5. 这些git技能够你用一年了

    用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...

  6. wireshark安装

    原文链接地址:http://blog.csdn.net/holandstone/article/details/47026213 Wireshark下载地址:https://www.wireshark ...

  7. jQuery Validate 表单验证插件----Validate简介,官方文档,官方下载地址

     一. jQuery Validate 插件的介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆 ...

  8. Sping mvc 环境下使用kaptcha 生成验证码

    一.kaptcha 的简介 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kap ...

  9. java Annotation Demo

    Java 1.5引入了annotation,这个功能非常好用,是用c#等语言借鉴过来的一个特性. 首先编译器本身支持一些像overrides,supresswarning之类的注解. Spring,j ...

  10. Hadoop,Vertica环境搭建

    本打算使用mapr的虚拟机在里面进行开发,使用eclipse进行调试,它的问题是,有时候服务不能完全起来, 如jobtracker和tasktracker,cldb没有起来,重启服务有可能解决. 但另 ...