1. def paintEvent(self, e):
  2. qp = QtGui.QPainter()
  3. qp.begin(self)
  4. self.DrawChessBoard(qp)
  5. self.Draw_Chess(qp)
  6. qp.end()

pyqt的画图机制是:

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

补充这两个绘制函数:

  1. def DrawChessBoard(self,qp):
  2. qp.setPen(QtCore.Qt.black)
  3. spos = [0, 0]
  4. epos = [0, 0]
  5. i = 0
  6. # 画横线
  7. while i < 15:
  8. spos[0] = self.startpos[0]
  9. spos[1] = self.startpos[1] + self.linelen * i
  10. epos[0] = self.startpos[0] + self.linelen * 14
  11. epos[1] = self.startpos[1] + self.linelen * i
  12. # print i, spos, '--->', epos
  13. #self.drawText(str(15 - i), spos[0] - 25, spos[1], 20)
  14. qp.drawText(spos[0] - 35, spos[1], QString(str(15-i)))
  15. qp.drawLine( spos[0], spos[1], epos[0], epos[1])
  16. i += 1
  17. i = 0
  18. while i < 15:
  19. spos[0] = self.startpos[0] + self.linelen * i
  20. spos[1] = self.startpos[1]
  21. epos[0] = self.startpos[0] + self.linelen * i
  22. epos[1] = self.startpos[1] + self.linelen * 14
  23. #self.drawText((self.ch[i]), epos[0], epos[1] + 20, 20)
  24. qp.drawText(epos[0], epos[1] + 30, QString(self.ch[i]))
  25. qp.drawLine(spos[0], spos[1], epos[0], epos[1])
  26. i += 1
  1. def Draw_Chess(self,qp):
  2. self.color=[QtCore.Qt.blue,QtCore.Qt.black,QtCore.Qt.white]
  3. self.putOneChess=False
  4. #print u'画一个棋子在棋盘'
  5. for point in self.PlayArr:
  6. arr_i,arr_j,chessKind=point
  7. pos_x,pos_y=self.Arr_To_Pos(arr_i,arr_j)
  8. #反走样
  9. qp.setRenderHint(QPainter.Antialiasing, True)
  10. #设置画笔颜色、宽度
  11. #qp.setPen(QPen(QColor(0, 0, 0), 2))
  12. #设置画刷颜色
  13.  
  14. qp.setBrush(self.color[chessKind])
  15. # 绘制圆
  16. qp.drawEllipse(QPointF(pos_x, pos_y),15, 15)
  17. if len(self.PlayArr)>0:
  18. point =self.PlayArr[-1]
  19. arr_i, arr_j, chessKind = point
  20. pos_x, pos_y = self.Arr_To_Pos(arr_i, arr_j)
  21. # 反走样
  22. qp.setRenderHint(QPainter.Antialiasing, True)
  23. # 设置画笔颜色、宽度
  24. # qp.setPen(QPen(QColor(0, 0, 0), 2))
  25. # 设置画刷颜色
  26.  
  27. qp.setBrush(QtCore.Qt.red)
  28. # 绘制圆
  29. qp.drawEllipse(QPointF(pos_x, pos_y), 5, 5)
  30. if len(self.virPlayArr)>0:
  31. for point in self.virPlayArr:
  32. arr_i, arr_j, chessKind = point
  33. pos_x, pos_y = self.Arr_To_Pos(arr_i, arr_j)
  34. # 反走样
  35. qp.setRenderHint(QPainter.Antialiasing, True)
  36. # 设置画笔颜色、宽度
  37. # qp.setPen(QPen(QColor(0, 0, 0), 2))
  38. # 设置画刷颜色
  39.  
  40. qp.setBrush(QtCore.Qt.blue)
  41. # 绘制圆
  42. 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. 〖Linux〗使用gsoap搭建web server(C)

    1. gsoap的好处就不用说了:百度百科 2. gsoap的下载地址:项目地址,目前我使用的是2.8.15版本 3. 开发环境:Ubuntu13.10 4. 具体操作步骤(以简单相加为例): 1) ...

  2. 好用的eclipse properties插件

    eclipse默认编辑器: 在有汉字的情况,特别是注释是汉字的情况,你会非常蛋疼的 JP的properties插件:http://propedit.sourceforge.jp/eclipse/upd ...

  3. 实现锁死的有滚动条的div的表格(datagird)

    JS框架使用Jquery 最终效果: 代码结构: 代码: <HEAD><TITLE>new document</TITLE> <META name=Gener ...

  4. Intellij IDEA 快捷键整理(dyCopy)

    原文:http://www.cnblogs.com/tonycody/p/3257601.html   [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “! ...

  5. MassiGra045 简体中文化|打开图片很快

    MassiGra045 简体中文化,是一款对图片的打开预览很高效的工具,据传是日本开发的. 本人之前一直使用,唯一有点缺点就是不能旋转图片. 图片预览 峰回路转: http://pan.baidu.c ...

  6. jQuery动态网格瀑布流插件Masonry

    Masonry是一款非常强大的jQuery动态网格布局插件,可以帮助开发人员快速开发瀑布流界面效果.和CSS中float的效果不太一样的地方在于,float先水平排列,然后再垂直排列,使用Masonr ...

  7. C#委托、事件剖析(下)

    本节对事件进行总结. 二.事件: 1.概念:Event:A member that enables an object or class to provide notifications;官方的解释是 ...

  8. Python练习笔记——斐波那契数列

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一 ...

  9. VS2010中遇到_WIN32_WINNT not defined

    VS2010中编程时遇到这个问题 _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h) 解决办法: ...

  10. ASP.NET Helper