最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年03月08日 14:55:30   作者:jia666666  
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析,需要的朋友可以參考下

在PyQt中常用的圖像類(lèi)有四種,QPixmap,QImage,QPicture,QBitmap

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

簡(jiǎn)單繪圖板實(shí)例

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPixmap
from PyQt5.QtCore import Qt, QPoint
class Winform(QWidget):
def __init__(self, parent=None):
super(Winform, self).__init__(parent)
#設(shè)置標(biāo)題
self.setWindowTitle("繪圖例子")
#實(shí)例化QPixmap類(lèi)
self.pix = QPixmap()
#起點(diǎn),終點(diǎn)
self.lastPoint = QPoint()
self.endPoint = QPoint()
#初始化
self.initUi()
def initUi(self):
# 窗口大小設(shè)置為600*500
self.resize(600, 500)
# 畫(huà)布大小為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)畫(huà)出連續(xù)的線
self.lastPoint = self.endPoint
painter = QPainter(self)
#繪制畫(huà)布到窗口指定位置處
painter.drawPixmap(0, 0, self.pix)
def mousePressEvent(self, event):
# 鼠標(biāo)左鍵按下
if event.button() == Qt.LeftButton:
self.lastPoint = event.pos()
self.endPoint = self.lastPoint
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()
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)行效果圖如下

代碼分析

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

第一組代碼:初始化代碼

        #實(shí)例化QPixmap類(lèi)

        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)畫(huà)出連續(xù)的線

        self.lastPoint = self.endPoint

        painter = QPainter(self)

        #繪制畫(huà)布到窗口指定位置處

        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)左鍵在白色畫(huà)布上進(jìn)行繪制,實(shí)現(xiàn)了簡(jiǎn)單的涂鴉板功能

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

相關(guān)文章

  • Python繪制七彩花朵(用Turtle)

    Python繪制七彩花朵(用Turtle)

    這篇文章主要給大家介紹了關(guān)于Python使用Turtle繪制七彩花朵的相關(guān)資料,通過(guò)本文介紹的方法就算剛?cè)腴T(mén)的朋友也可以很快的入手繪制出漂亮的七彩花朵,需要的朋友可以參考下
    2023-07-07
  • python實(shí)現(xiàn)AI聊天機(jī)器人詳解流程

    python實(shí)現(xiàn)AI聊天機(jī)器人詳解流程

    事情是這樣的,最近認(rèn)識(shí)的一位小姐姐有每天早晨看天氣預(yù)報(bào)的習(xí)慣。在我看來(lái),很多人起床第一件事情就是看微信消息,既然這樣,我就勉為其難每天早晨給小姐姐發(fā)送一則天氣預(yù)報(bào)吧
    2021-11-11
  • python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法

    python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法

    這篇文章主要介紹了python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法,涉及Python使用xlrd模塊檢索Excel的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • python接入支付寶的實(shí)例操作

    python接入支付寶的實(shí)例操作

    在本篇文章里小編給大家整理的是一篇關(guān)于python接入支付寶的實(shí)例操作內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Python變量的定義和運(yùn)算符的使用

    Python變量的定義和運(yùn)算符的使用

    這篇文章主要介紹了Python變量的定義和運(yùn)算符的使用,Python和C/Java不同,在定義變量的時(shí)候不需要顯示的指定變量的類(lèi)型,在賦值的時(shí)候自動(dòng)就會(huì)確定類(lèi)型,需要的朋友可以參考下
    2023-05-05
  • python數(shù)據(jù)分析之如何刪除value=0的行

    python數(shù)據(jù)分析之如何刪除value=0的行

    這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)分析之如何刪除value=0的行的相關(guān)資料,文中通過(guò)實(shí)例代碼以及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-12-12
  • python實(shí)現(xiàn)批量修改文件名

    python實(shí)現(xiàn)批量修改文件名

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量修改文件名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python入門(mén)教程(二十八)Python中的JSON

    Python入門(mén)教程(二十八)Python中的JSON

    這篇文章主要介紹了Python入門(mén)教程(二十八)Python中的JSON,JSON 是用 JavaScript 對(duì)象表示法(JavaScript object notation)編寫(xiě)的文本,接下來(lái)我們就來(lái)學(xué)習(xí)一下
    2023-04-04
  • 使用Python簡(jiǎn)單編寫(xiě)一個(gè)股票監(jiān)控系統(tǒng)

    使用Python簡(jiǎn)單編寫(xiě)一個(gè)股票監(jiān)控系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)單編寫(xiě)一個(gè)股票監(jiān)控系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • python生成器表達(dá)式和列表解析

    python生成器表達(dá)式和列表解析

    最近在學(xué)習(xí)python的過(guò)程中,對(duì)列表解析及生成器表達(dá)式有點(diǎn)疑惑。從表面上看,兩者很相似,只有一點(diǎn)不同:列表解析采用中括號(hào)[]來(lái)包含,生成器表達(dá)式采用小括號(hào)()來(lái)包含。本文我們就來(lái)詳細(xì)看下python生成器表達(dá)式和列表解析
    2016-03-03

最新評(píng)論

电白县| 邢台市| 贵溪市| 新沂市| 江川县| 天镇县| 蛟河市| 于田县| 静安区| 襄垣县| 屏东县| 武邑县| 马龙县| 天台县| 连云港市| 溧阳市| 祁连县| 岳普湖县| 乌鲁木齐县| 高清| 潞城市| 德保县| 禄劝| 获嘉县| 珠海市| 紫阳县| 轮台县| 樟树市| 夏邑县| 兰考县| 嘉峪关市| 通州市| 砚山县| 嘉义县| 湖北省| 临桂县| 手机| 石楼县| 棋牌| 盐亭县| 太仆寺旗|