当我们想要改变或者增强已存在的窗口组件时,或者准备从零开始创建自定义窗口组件时,可以使用绘图。我们通过使用PyQt4工具包提供的绘图API来绘图。

绘图在 paintEvent() 方法中进行。绘制代码在 QPainter 对象的 begin()end() 之间。

绘制文本

我们从在窗口客户区绘制一些Unicode文本开始。

#!/usr/bin/python
# -*- coding: utf-8 -*- # drawtext.py import sys
from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self):
super(Example, self).__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Draw Text') self.text = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\
\u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\
\u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430' 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', 10))
qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text) app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()

在我们的例子中,我们绘制一些西里尔字母的文本,文正水平和垂直居中对齐。

def paintEvent(self, event):

在绘制事件中绘画。

qp = QtGui.QPainter()
qp.begin(self)
self.drawText(event, qp)
qp.end()

QPainter 类负责所有的低级绘画。所有的绘制方法都在 begin()end() 方法之间。这里实际的绘制是代理给了 drawText() 方法。

paint.setPen(QtGui.QColor(168, 34, 3))
paint.setFont(QtGui.QFont('Decorative', 10))

这里我们定义了画笔和字体,用来绘制文本。

paint.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)

drawText() 方法在窗口上绘制文本, 绘制事件的 rect() 方法返回需要更新的矩形。

绘制点

点是可以绘制的最简单的图形对象,是窗口上的很小的一个区域。

#!/usr/bin/python
# -*- coding: utf-8 -*- # points.py import sys, random
from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self):
super(Example, self).__init__() self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Points') def paintEvent(self, e): qp = QtGui.QPainter()
qp.begin(self)
self.drawPoints(qp)
qp.end() def drawPoints(self, qp): qp.setPen(QtCore.Qt.red)
size = self.size() for i in range(1000):
x = random.randint(1, size.width()-1)
y = random.randint(1, size.height()-1)
qp.drawPoint(x, y) app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()

在这个例子中,我们在客户区随机地绘制1000个红点。

paint.setPen(QtCore.Qt.red)

使用预定义的颜色常量,把画笔设为红色。

size = self.size()

每次我们缩放窗口,都将产生绘制事件。通过 size() 方法得到窗口的尺寸,使用窗口尺寸来把点分布到窗口的客户区。

paint.drawPoint(x, y)

使用 drawPoint() 方法绘制点。

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4593894.html

读Pyqt4教程,带你入门Pyqt4 _011的更多相关文章

  1. 读Pyqt4教程,带你入门Pyqt4 _009

    QLineEdit QLineEdit 窗口组件用来输入或者编辑单行纯文本,有撤销/重做,剪切/粘贴和拖放功能. #!/usr/bin/python # -*- coding: utf-8 -*- # ...

  2. 读Pyqt4教程,带你入门Pyqt4 _005

    对话框窗体或对话框是现代GUI应用不可或缺的一部分.dialog定义为两个或多个人之间的交谈.在计算机程序中dialog是一个窗体,用来和程序“交谈”.对话框用来输入数据.修改数据.改变程序设置等等. ...

  3. 读Pyqt4教程,带你入门Pyqt4 _004

    在PyQt4教程的这部分中,我们将探讨应用中事件和信号的发生. 事件是GUI程序的重要部分,由用户或者系统产生.当我们调用应用的 exec_() 方法,应用进入主循环.主循环获取事件并把它们发往对象. ...

  4. 读Pyqt4教程,带你入门Pyqt4 _003

    编程中的一个重要事情是布局管理,布局管理是如何在窗体上摆放窗口组件.可以有两种方式进行管理:绝对定位或使用布局类. 绝对定位 程序员用像素指定每个控件的位置和尺寸.使用绝对定位时,你必须理解几件事情. ...

  5. 读Pyqt4教程,带你入门Pyqt4 _002

    在这节教程中,我们将创建菜单和工具栏. QMainWindow 类提供应用程序主窗口,可以创建一个经典的拥有状态栏.工具栏和菜单栏的应用程序骨架. 菜单栏 菜单栏是GUI应用程序最明显的部分之一,这是 ...

  6. 读Pyqt4教程,带你入门Pyqt4 _013

    你是否曾经看着应用程序并思考特定的GUI项是如何产生的?大概每位程序员都这样过.然后你能看到你喜欢的GUI库提供的一系列窗口组件,但是你无法找到它.工具包通常仅仅提供最常用的窗口组件,比如按钮.文本组 ...

  7. 读Pyqt4教程,带你入门Pyqt4 _012

    颜色 颜色是指一个代表红(Red).绿(Green).蓝(Blue)(RGB)强度值组合的对象,有效的RGB值在0~255之间.我们可以用多种方式定义颜色,最常用的是RGB十进制或者十六进制值.也可以 ...

  8. 读Pyqt4教程,带你入门Pyqt4 _010

    在PyQt4教程的这部分中,我们讨论拖放操作. 拖放(Drag-and-drop)指的是图形用户界面(Graphical user interface)中,在一个虚拟的对象上按着鼠标键将之拖曳到另一个 ...

  9. 读Pyqt4教程,带你入门Pyqt4 _006

    窗口组件是应用程序的基本构建块.PyQt4编程工具包拥有范围广泛的各种窗口组件.按钮.选择框.滑块.列表框等等,程序员工作所需要的一切.在教程的这部分中,我们将介绍一些有用的窗口组件. QCheckB ...

随机推荐

  1. RF(作用与目的)

    1.robotframework 自动化原理 通过 ride 工具编写脚本,加载指定的 UI 测试库,再通过 pybot 程序去运行指定脚本,调用浏览器驱动,打开浏览器,操作浏览器页面元素,达到模拟用 ...

  2. Java中常用七个阻塞队列的总结

    Java队列总结 通过前面文章的学习,我们对Java中常用队列做了介绍.本文,咱们来对队列做个总结吧. 首先,我们介绍了现实生活中的实际场景(排队买票等),来告诉我们为什么需要使用队列. 队列是一种先 ...

  3. 解决python语言的工具pycharm以及Windows电脑安装pygame模块的问题

    人生苦短,我用python,python作为一门当今时代潮流性的语言,已经成为大多数的年轻程序猿们向往的目标,python中有许多的库, 其中有一个pygame库是作为开发2D游戏必不可少的开发库,是 ...

  4. CSS的基础使用

    一,css是什么? CSS全称为“层叠样式表” ,与HTML相辅相成,实现网页的排版布局与样式美化 二,CSS使用方式 1.行内样式/内联样式(单一页面中使用) 借助于style标签属性,为当前的标签 ...

  5. DHCP报文(1)

    DHCP报文 1.地址申请类型(4步工作原理,常考) (1)此题是典型的四步工作原理,在其配置过程中由于没有分配IP地址,用的是广播形式,所以其4中报文类型的目的IP地址均为255.255.255.2 ...

  6. Qt编程基础入门之二

    QMainWindow 菜单栏 菜单栏 最多有一个 //菜单栏创建,一个 QMenuBar *menu = new QMenuBar(this); // this->setMenuBar(men ...

  7. 王颖奇 201771010129 第三周 Java基本程序设计总结

    实验三 Java基本程序设计 实验时间 2018-9-13 201771010129 王颖奇 1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PT ...

  8. calc less 下不起作用

    在 less中不能使用css3 calc属性不能 css3 新增长度计算属性 可以根据不同单位计算宽度 .test{ width: calc(100% - 150px); } 但是当我们在less中使 ...

  9. JVM入门--类加载器

    一.基础架构 概览 我们平时说的栈是指的Java栈,native method stack 里面装的都是native方法 细节架构图 二.类加载器 1.类的加载 方法区并不是存放方法的区域,其是存放类 ...

  10. SpringBoot读取配置文件三步走

    1首先新建application.properties文件 cn.qdl.demo.url=http://localhost:8080 2写一个类包上面的配置文件,类名随便取 public class ...