def paintEvent(self, e):
qp = QtGui.QPainter()
qp.begin(self)
self.DrawChessBoard(qp)
self.Draw_Chess(qp)
qp.end()

pyqt的画图机制是:

每次界面更新时,自动调用 paintEvet(self,e)函数,所以将绘图的地方重写与该函数内。首先获得画笔,然后在begin方法h和end方法之间,执行绘图方法。但是,这里有个问题,我每次界面更新都会调用该方法,但是我们并不是每次都想执行绘制的的东西。比如我这里有两个函数:绘制棋盘和绘制棋子。每次我都需要绘制棋盘,但是不是每次都需要绘制棋盘。怎么办呢?设置绘制开关。我设置一个变量,通过if 进入不同的绘制函数。

补充这两个绘制函数:

 def DrawChessBoard(self,qp):
qp.setPen(QtCore.Qt.black)
spos = [0, 0]
epos = [0, 0]
i = 0
# 画横线
while i < 15:
spos[0] = self.startpos[0]
spos[1] = self.startpos[1] + self.linelen * i
epos[0] = self.startpos[0] + self.linelen * 14
epos[1] = self.startpos[1] + self.linelen * i
# print i, spos, '--->', epos
#self.drawText(str(15 - i), spos[0] - 25, spos[1], 20)
qp.drawText(spos[0] - 35, spos[1], QString(str(15-i)))
qp.drawLine( spos[0], spos[1], epos[0], epos[1])
i += 1
i = 0
while i < 15:
spos[0] = self.startpos[0] + self.linelen * i
spos[1] = self.startpos[1]
epos[0] = self.startpos[0] + self.linelen * i
epos[1] = self.startpos[1] + self.linelen * 14
#self.drawText((self.ch[i]), epos[0], epos[1] + 20, 20)
qp.drawText(epos[0], epos[1] + 30, QString(self.ch[i]))
qp.drawLine(spos[0], spos[1], epos[0], epos[1])
i += 1
def Draw_Chess(self,qp):
self.color=[QtCore.Qt.blue,QtCore.Qt.black,QtCore.Qt.white]
self.putOneChess=False
#print u'画一个棋子在棋盘'
for point in self.PlayArr:
arr_i,arr_j,chessKind=point
pos_x,pos_y=self.Arr_To_Pos(arr_i,arr_j)
#反走样
qp.setRenderHint(QPainter.Antialiasing, True)
#设置画笔颜色、宽度
#qp.setPen(QPen(QColor(0, 0, 0), 2))
#设置画刷颜色 qp.setBrush(self.color[chessKind])
# 绘制圆
qp.drawEllipse(QPointF(pos_x, pos_y),15, 15)
if len(self.PlayArr)>0:
point =self.PlayArr[-1]
arr_i, arr_j, chessKind = point
pos_x, pos_y = self.Arr_To_Pos(arr_i, arr_j)
# 反走样
qp.setRenderHint(QPainter.Antialiasing, True)
# 设置画笔颜色、宽度
# qp.setPen(QPen(QColor(0, 0, 0), 2))
# 设置画刷颜色 qp.setBrush(QtCore.Qt.red)
# 绘制圆
qp.drawEllipse(QPointF(pos_x, pos_y), 5, 5)
if len(self.virPlayArr)>0:
for point in self.virPlayArr:
arr_i, arr_j, chessKind = point
pos_x, pos_y = self.Arr_To_Pos(arr_i, arr_j)
# 反走样
qp.setRenderHint(QPainter.Antialiasing, True)
# 设置画笔颜色、宽度
# qp.setPen(QPen(QColor(0, 0, 0), 2))
# 设置画刷颜色 qp.setBrush(QtCore.Qt.blue)
# 绘制圆
qp.drawEllipse(QPointF(pos_x, pos_y), 15, 15)

pyQt绘图的更多相关文章

  1. Python--matplotlib绘图可视化知识点整理

    from:https://segmentfault.com/a/1190000005104723 本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找. 强烈推荐ipython无论你 ...

  2. pyqt中使用matplotlib绘制动态曲线

    一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟 ...

  3. pyqt中使用matplotlib绘制动态曲线 – pythonic

    一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟 ...

  4. 【pyqtgraph绘图】在pyqtgraph中绘图

    解读pyqtgraph官方API-在pyqtgraph中绘图 参考: http://www.pyqtgraph.org/documentation/plotting.html 在pyqtgraph中绘 ...

  5. 【pyqtgraph绘图】如何使用pyqtgraph

    解读官方API-如何使用pyqtgraph 这里有一些使用pyqtgraph的建议方法: 从交互式shell(python -i,ipython等) 从应用程序显示弹出窗口 在PyQt应用程序中嵌入小 ...

  6. 从Qt到PyQt

    Hello World PyQt与Qt具有极其相似的类族和API,而且不再使用qmake系统和Q_OBJECT宏使得PyQt在没有编译链接时频繁的错误而且代码更加友好. from PyQt4 impo ...

  7. Python绘图技巧

    转自:https://www.cnblogs.com/zhizhan/p/5615947.html Python--matplotlib绘图可视化知识点整理 强烈推荐ipython 原文:http:/ ...

  8. IPython绘图和可视化---matplotlib 入门

    最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...

  9. 第15.47节、PyQt显示部件:QGraphicsView图形视图和QGraphicsScene图形场景简介及应用案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Graphics V ...

随机推荐

  1. java 多态的好处

    /* 对象的多态性. class 动物{} class 猫 extends 动物{} class 狗 extends 动物{} 猫 x = new 猫(); 动物 x = new 猫();//一个对象 ...

  2. 生产服务器环境最小化安装后 Centos 6.5优化配置备忘

    生产服务器环境最小化安装后 Centos 6.5优化配置备忘 作者:Memory 发布于:2014-8-13 15:00 Wednesday 服务器 本文 centos 6.5 优化 的项有18处: ...

  3. 用 Qt Creator 开发非 Qt 的 C/C++ 程序

    在Windows还是习惯用VS2005但是现在到了Linux下,开发起来C/C++程序就没有那么得心应手的IDE了.虽然很多人推荐E开头那个主要作为Java开发的IDE,不过安上插件后感觉不大好,一个 ...

  4. C++知识整理(在此感谢大牛的整理)

    这篇文章主要讲解如何在C++中使用cin/cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等.通过本文,您可以完全脱离scanf/printf,仅使用cin/c ...

  5. leetcode621 贪心:任务安排

    题目链接 给定26种任务,每种任务的数量已知. 相同任务之间必须间隔n个时间段,为了不足n个时间段,可以让及其休息. 问:最少需要多长时间才能处理完这些任务? 这道题用贪心策略解决:每次安排任务时,优 ...

  6. pip安装注意事项

    pip源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 h ...

  7. 浅谈 .NET 中的对象引用、非托管指针和托管指针

    目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五.托管指针 前言 本文主要是以 C# 为例介绍 .NET ...

  8. Smarty中section的使用

     在smarty的使用过程中,有很多时候需要将一个数组输出到模板中来处理,以下将演示如何将一个索引(index)数组和关联(assocaite)数组在页面中展现出来. 本文中假设有如下一个索引数组 1 ...

  9. PLSQL_Oracle Exception异常分类、异常抛出、异常处理、异常传播(概念)

    2014-06-03 Created By BaoXinjian

  10. html表单的各种输入控件

    表单的输入控件主要是input和select.其中input可以是多种类型,通过type属性来进行定义,type可以取值是text,radio,checkbox,password,submit,res ...