中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python GUI庫圖形界面開發之PyQt5簡單繪圖板實例與代碼分析

發布時間:2020-10-08 09:27:33 來源:腳本之家 閱讀:315 作者:jia666666 欄目:開發技術

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

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

簡單繪圖板實例

# -*- 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)
#設置標題
self.setWindowTitle("繪圖例子")
#實例化QPixmap類
self.pix = QPixmap()
#起點,終點
self.lastPoint = QPoint()
self.endPoint = QPoint()
#初始化
self.initUi()
def initUi(self):
# 窗口大小設置為600*500
self.resize(600, 500)
# 畫布大小為400*400,背景為白色
self.pix = QPixmap(400, 400)
self.pix.fill(Qt.white)
def paintEvent(self, event):
pp = QPainter(self.pix)
# 根據鼠標指針前后兩個位置繪制直線
pp.drawLine(self.lastPoint, self.endPoint)
# 讓前一個坐標值等于后一個坐標值,
# 這樣就能實現畫出連續的線
self.lastPoint = self.endPoint
painter = QPainter(self)
#繪制畫布到窗口指定位置處
painter.drawPixmap(0, 0, self.pix)
def mousePressEvent(self, event):
# 鼠標左鍵按下
if event.button() == Qt.LeftButton:
self.lastPoint = event.pos()
self.endPoint = self.lastPoint
def mouseMoveEvent(self, event):
# 鼠標左鍵按下的同時移動鼠標
if event.buttons() and Qt.LeftButton:
self.endPoint = event.pos()
# 進行重新繪制
self.update()
def mouseReleaseEvent(self, event):
# 鼠標左鍵釋放
if event.button() == Qt.LeftButton:
self.endPoint = event.pos()
# 進行重新繪制
self.update()
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Winform()
form.show()
sys.exit(app.exec_())

運行效果圖如下

python GUI庫圖形界面開發之PyQt5簡單繪圖板實例與代碼分析

代碼分析

在這個例子中,實現了簡單的繪圖功能,按住鼠標左鍵在畫板上進行繪制,釋放鼠標左鍵結束繪圖

第一組代碼:初始化代碼

        #實例化QPixmap類

        self.pix = QPixmap()

        #起點,終點

        self.lastPoint = QPoint()

        self.endPoint = QPoint()

        #初始化

        self.initUi()

第二組代碼:重構paintEvent()函數

        def paintEvent(self, event):

        pp = QPainter(self.pix)

        # 根據鼠標指針前后兩個位置繪制直線

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

        # 讓前一個坐標值等于后一個坐標值,

        # 這樣就能實現畫出連續的線

        self.lastPoint = self.endPoint

        painter = QPainter(self)

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

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

第三組代碼:重構mousePressEvent()函數,使用兩個點來繪制線條,這兩個點從下面的鼠標事件中獲取

 def mousePressEvent(self, event):

        # 鼠標左鍵按下

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

            self.lastPoint = event.pos()

            self.endPoint = self.lastPoint

第四組代碼:重構mouseMoveEvent()函數,當鼠標左鍵把按下時獲得開始點,每次繪制,都讓結束點和開始點重合,這樣確保這兩個點的值都是預期值

    def mouseMoveEvent(self, event):

        # 鼠標左鍵按下的同時移動鼠標

        if event.buttons() and Qt.LeftButton:

            self.endPoint = event.pos()

            # 進行重新繪制

            self.update()

第五組代碼:重構mouseReleaseEvent()函數,當鼠標指針移動時獲得結束點,并更新繪制,注意,這里的button()函數可以獲取在鼠標指針移動過程中按下的所有按鍵,然后用Qt.LeftButton來判斷是否按下了左鍵,在mouseMoveEvent()中必須使用該函數來判斷按下的鼠標按鍵,最后調用update()函數,會執行paintEvent()函數進行重新繪制

    def mouseReleaseEvent(self, event):

        # 鼠標左鍵釋放

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

            self.endPoint = event.pos()

            # 進行重新繪制

            self.update()

當釋放鼠標時,也會進行繪制,現在運行程序,按下鼠標左鍵在白色畫布上進行繪制,實現了簡單的涂鴉板功能

本文介紹了PyQt5利用QPixmap,QImage,QPicture,QBitmap實現簡單畫板的實例,更多關于PyQt5圖形圖像知識請查看下面的相關鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方城县| 海晏县| 临海市| 县级市| 静乐县| 安徽省| 曲沃县| 永靖县| 宜良县| 蓬安县| 泰州市| 延庆县| 石棉县| 桃园市| 永仁县| 鹤峰县| 观塘区| 常山县| 当阳市| 丹棱县| 上蔡县| 南部县| 陇川县| 三江| 剑河县| 霸州市| 深水埗区| 安西县| 梁平县| 荣昌县| 巢湖市| 巴林右旗| 乃东县| 桃源县| 孟连| 湘阴县| 收藏| 革吉县| 乌拉特前旗| 天全县| 定州市|