pyQt绘图

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)

时间: 2024-10-21 11:18:26

pyQt绘图的相关文章

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

Python--matplotlib绘图可视化知识点整理 强烈推荐ipython 原文:http://michaelxiang.me/2016/05/14/python-matplotlib-basic/ 无论你工作在什么项目上,IPython都是值得推荐的.利用ipython --pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能. 本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找.

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

一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟,每一秒钟绘制一个点,X轴长度超过1分钟,则左移1秒刻度,实现动态效果 2)Y轴显示随机变化的数值,1-100 三.准备工作 1环境:python3.3,eric5,pyqt4 四.开始动手 : 使用Eric创建新项目: 在设计编码前期主要用到Eric的两个窗口:源码和窗体浏览器,类似delphi.

pyqt之鼠标事件

http://www.happiness.net46.net/?sort=9&page=2 http://iw3c.com/archive/877/ http://hyry.dip.jp/tech/slice/slice.html/16 用guiqwt制作实时波形绘图程序+PYQT # coding=gbk # 导入模块 import sys from PyQt4 import QtGui,QtCore ################################# 自定义窗口类 #####

pyqt中使用matplotlib绘制动态曲线

一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟,每一秒钟绘制一个点,X轴长度超过1分钟,则左移1秒刻度,实现动态效果 2)Y轴显示随机变化的数值,1-100 三.准备工作 1环境:python3.3,eric5,pyqt4 四.开始动手: 使用Eric创建新项目: 在设计编码前期主要用到Eric的两个窗口:源码和窗体浏览器,类似delphi.

文摘:matplotlib绘图可视化知识点整理

原文:http://michaelxiang.me/2016/05/14/python-matplotlib-basic/ 无论你工作在什么项目上,IPython都是值得推荐的.利用ipython --pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能. 本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找. 这样IPython配置为使用你所指定的matplotlib GUI后端(TK/wx

【pyqtgraph绘图】如何使用pyqtgraph

解读官方API-如何使用pyqtgraph 这里有一些使用pyqtgraph的建议方法: 从交互式shell(python -i,ipython等) 从应用程序显示弹出窗口 在PyQt应用程序中嵌入小部件 命令行使用 PyQtGraph使得从命令行可视化数据变得非常容易.注意: import pyqtgraph as pg pg.plot(data) # 数据可以是列表或numpy数组 上面的例子将打开一个窗口,显示给定数据的线图.调用  pg.plot返回创建的plot widget句柄,允许

PYQT设计无边框窗体

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObject

利用百度API画多边形,不能监测到百度绘图鼠标事件

var drawingManager = new BMapLib.DrawingManager(map, { isOpen: false, //是否开启绘制模式 enableDrawingTool: true, //是否显示工具栏 drawingToolOptions: { anchor: BMAP_ANCHOR_TOP_RIGHT, //位置 offset: new BMap.Size(5, 5), //偏离值 scale: 0.8, //工具栏缩放比例 //工具栏显示数据 drawingMo

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中. 解:MATLAB指令: theta=0:0.1:6*pi;rho=cos(theta/3)+1/9; >> polar(theta,rho) >> >> plot(theta,rho) >> semilogx(theta,rho) >> grid >> hist(rho,15) 结果分别如下图: 图1 图2 图3 图4