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
View Code

 

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)
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM