午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析

瀏覽:112日期:2022-08-03 11:36:39

在PyQt中常用的圖像類有四種,QPixmap,QImage,QPicture,QBitmap

類型 描述 QPixmap 專門為繪圖設(shè)計(jì)的,在繪制圖片時(shí)需要使用QPixmap QImage 提供了一個(gè)與硬件無(wú)關(guān)的圖像表示函數(shù),可以用于圖片像素級(jí)訪問(wèn) QPicture 是一個(gè)繪圖設(shè)備類,它繼承自QPainter類,可以使用QPainter的begin()函數(shù)在QPicture上繪圖,使用end()函數(shù)結(jié)束繪圖,使用QPicture的save()函數(shù)將QPainter所使用的繪圖指令保存在文件中 QBitmap 是一個(gè)繼承自QPixmap的簡(jiǎn)單類,它提供了1bit深度的二值圖像的類,QBitmap提供的單色圖像,可以用來(lái)制作游標(biāo)(QCursor),或者筆刷(QBrush) 簡(jiǎn)單繪圖板實(shí)例

# -*- coding: utf-8 -*-import sysfrom PyQt5.QtWidgets import QApplication, QWidgetfrom PyQt5.QtGui import QPainter, QPixmapfrom PyQt5.QtCore import Qt, QPointclass Winform(QWidget):def __init__(self, parent=None):super(Winform, self).__init__(parent)#設(shè)置標(biāo)題self.setWindowTitle('繪圖例子')#實(shí)例化QPixmap類self.pix = QPixmap()#起點(diǎn),終點(diǎn)self.lastPoint = QPoint()self.endPoint = QPoint()#初始化self.initUi()def initUi(self):# 窗口大小設(shè)置為600*500self.resize(600, 500)# 畫布大小為400*400,背景為白色self.pix = QPixmap(400, 400)self.pix.fill(Qt.white)def paintEvent(self, event):pp = QPainter(self.pix)# 根據(jù)鼠標(biāo)指針前后兩個(gè)位置繪制直線pp.drawLine(self.lastPoint, self.endPoint)# 讓前一個(gè)坐標(biāo)值等于后一個(gè)坐標(biāo)值,# 這樣就能實(shí)現(xiàn)畫出連續(xù)的線self.lastPoint = self.endPointpainter = QPainter(self)#繪制畫布到窗口指定位置處painter.drawPixmap(0, 0, self.pix)def mousePressEvent(self, event):# 鼠標(biāo)左鍵按下if event.button() == Qt.LeftButton:self.lastPoint = event.pos()self.endPoint = self.lastPointdef mouseMoveEvent(self, event):# 鼠標(biāo)左鍵按下的同時(shí)移動(dòng)鼠標(biāo)if event.buttons() and Qt.LeftButton:self.endPoint = event.pos()# 進(jìn)行重新繪制self.update()def mouseReleaseEvent(self, event):# 鼠標(biāo)左鍵釋放if event.button() == Qt.LeftButton:self.endPoint = event.pos()# 進(jìn)行重新繪制self.update()if __name__ == '__main__':app = QApplication(sys.argv)form = Winform()form.show()sys.exit(app.exec_())

運(yùn)行效果圖如下

python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析

代碼分析

在這個(gè)例子中,實(shí)現(xiàn)了簡(jiǎn)單的繪圖功能,按住鼠標(biāo)左鍵在畫板上進(jìn)行繪制,釋放鼠標(biāo)左鍵結(jié)束繪圖

第一組代碼:初始化代碼

        #實(shí)例化QPixmap類

        self.pix = QPixmap()

        #起點(diǎn),終點(diǎn)

        self.lastPoint = QPoint()

        self.endPoint = QPoint()

        #初始化

        self.initUi()

第二組代碼:重構(gòu)paintEvent()函數(shù)

        def paintEvent(self, event):

        pp = QPainter(self.pix)

        # 根據(jù)鼠標(biāo)指針前后兩個(gè)位置繪制直線

        pp.drawLine(self.lastPoint, self.endPoint)

        # 讓前一個(gè)坐標(biāo)值等于后一個(gè)坐標(biāo)值,

        # 這樣就能實(shí)現(xiàn)畫出連續(xù)的線

        self.lastPoint = self.endPoint

        painter = QPainter(self)

        #繪制畫布到窗口指定位置處

        painter.drawPixmap(0, 0, self.pix)

第三組代碼:重構(gòu)mousePressEvent()函數(shù),使用兩個(gè)點(diǎn)來(lái)繪制線條,這兩個(gè)點(diǎn)從下面的鼠標(biāo)事件中獲取

 def mousePressEvent(self, event):

        # 鼠標(biāo)左鍵按下

        if event.button() == Qt.LeftButton:

            self.lastPoint = event.pos()

            self.endPoint = self.lastPoint

第四組代碼:重構(gòu)mouseMoveEvent()函數(shù),當(dāng)鼠標(biāo)左鍵把按下時(shí)獲得開(kāi)始點(diǎn),每次繪制,都讓結(jié)束點(diǎn)和開(kāi)始點(diǎn)重合,這樣確保這兩個(gè)點(diǎn)的值都是預(yù)期值

    def mouseMoveEvent(self, event):

        # 鼠標(biāo)左鍵按下的同時(shí)移動(dòng)鼠標(biāo)

        if event.buttons() and Qt.LeftButton:

            self.endPoint = event.pos()

            # 進(jìn)行重新繪制

            self.update()

第五組代碼:重構(gòu)mouseReleaseEvent()函數(shù),當(dāng)鼠標(biāo)指針移動(dòng)時(shí)獲得結(jié)束點(diǎn),并更新繪制,注意,這里的button()函數(shù)可以獲取在鼠標(biāo)指針移動(dòng)過(guò)程中按下的所有按鍵,然后用Qt.LeftButton來(lái)判斷是否按下了左鍵,在mouseMoveEvent()中必須使用該函數(shù)來(lái)判斷按下的鼠標(biāo)按鍵,最后調(diào)用update()函數(shù),會(huì)執(zhí)行paintEvent()函數(shù)進(jìn)行重新繪制

    def mouseReleaseEvent(self, event):

        # 鼠標(biāo)左鍵釋放

        if event.button() == Qt.LeftButton:

            self.endPoint = event.pos()

            # 進(jìn)行重新繪制

            self.update()

當(dāng)釋放鼠標(biāo)時(shí),也會(huì)進(jìn)行繪制,現(xiàn)在運(yùn)行程序,按下鼠標(biāo)左鍵在白色畫布上進(jìn)行繪制,實(shí)現(xiàn)了簡(jiǎn)單的涂鴉板功能

本文介紹了PyQt5利用QPixmap,QImage,QPicture,QBitmap實(shí)現(xiàn)簡(jiǎn)單畫板的實(shí)例,更多關(guān)于PyQt5圖形圖像知識(shí)請(qǐng)查看下面的相關(guān)鏈接

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日韩欧美国产高清91 | 99热精品在线观看 | 国产哺乳奶水91在线播放 | wwwwww国产| 四虎国产精品永久在线国在线 | 老司机午夜精品 | 欧美激情网站 | 国产人成 | 国产久草视频 | 理论片亚洲 | 国产在线综合视频 | 一区二区三区在线观看免费视频 | 天天综合网在线 | 四虎成人免费影院 | 久久伊人成人网 | h片在线免费观看 | 色婷婷国产 | 亚洲精品白浆高清久久久久久 | 人人插人人爽 | 欧美日韩中 | 香蕉视频官方 | 四虎三级| 国产精品欧美在线 | 国产在线观看一区二区三区 | a在线天堂 | 麻豆视频免费在线 | 国产一区免费看 | 久久99国产综合精品免费 | 99爱免费视频 | 草在线视频 | 岛国av片| 日韩精品中文在线 | 精品免费视频 | 久久加久久 | 一区二区三区不卡视频 | 偷拍欧美亚洲 | 国产日韩欧美在线观看 | 少妇喷水在线观看 | 手机在线看a | 成年人的视频 | 亚洲精品一区二区在线 |