PySide2學習記錄(十三):QPainter

Python版本3.7
PySide2 Version: 5.14.1
官方文檔:http://doc.qt.io/qtforpython/index.html

如果要進行繪圖操作势就,就需要了解一下QPainter類和QPaintDevice類哨鸭。QPainter類的對象主要用于執(zhí)行具體的操作叁温,比如畫一條直線淋样,畫一個圓骚腥,畫一幅圖像等等咨察。QPaintDevice類代表可以進行繪制的類,所有你在界面上能看見的控件都可以是一個QPaintDevice(因為都是可以繪制的)螃成,實際上所有可見的控件都繼承了QPaintDevice類呕臂。這么多種類的設備該如何統(tǒng)一進行繪制淡喜,就需要QPaintEngine類提供統(tǒng)一的接口,一般都是在QPainterQPaintDevice內(nèi)部進行使用诵闭,一般情況下對我們都是透明的(不用太在意這個類)。

既然可見控件都是一個可以繪圖的設備澎嚣,那么應該在哪里進行自定義繪制疏尿,看下面一個例子。

from PySide2.QtWidgets import QWidget, QApplication
from PySide2.QtGui import QPainter, QBrush, QColor
from PySide2.QtCore import Qt, QRect


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFixedSize(300, 200)

    def paintEvent(self, event):
        # 注意設置對象易桃,不然painter不知道在哪畫
        painter = QPainter(self)
        # 下面兩行等效上面一行
        # painter = QPainter()
        # painter.begin(self)
        
        # 設置藍色的畫筆
        painter.setPen(Qt.blue)
        rectangle = QRect(10, 20, 80, 60)
        # 繪制矩形區(qū)域
        painter.drawRect(rectangle)
        # 填充矩形區(qū)域褥琐,使用藍色的刷子
        painter.fillRect(rectangle, QBrush(QColor(Qt.blue)))


app = QApplication()
window = MyWidget()
window.show()
app.exec_()

運行截圖:

圖1

注意對于上面的例子,當繪圖設備是一個widget的時候晤郑,QPainter只能在繪圖事件中(paintEvent)中進行使用敌呈。判斷當前painter是否可用可以使用QPainter類里面提供的isActive()函數(shù),如果可用會返回True造寝,否則False磕洪。在其它一些地方可能會看見使用begin(arg_1)方法,該方法傳入一個需要繪制設備的對象诫龙,表示準備在該設備上進行繪圖析显,結(jié)束繪圖可以調(diào)用end(),一般情況下签赃,釋放painter時會自動進行調(diào)用谷异。通過自定義繪圖,我們便可以設計出各種漂亮的控件锦聊。
什么時候會調(diào)用paintEvent歹嘹?當repaint()update()函數(shù)被調(diào)用的時候,系統(tǒng)會調(diào)用paintEvent孔庭。

再來看一個例子:

from PySide2.QtWidgets import QApplication, QLabel
from PySide2.QtGui import QPixmap, QPainter
from PySide2.QtCore import QRect


app = QApplication()
# 生成一個QPixmap對象
image = QPixmap('image.jpg')
painter = QPainter()
painter.begin(image)
rectangle = QRect(100, 150, 100, 100)
painter.drawRect(rectangle)
painter.end()
label = QLabel()
# 設置標簽起始位置和大小
label.setGeometry(50, 50, 800, 800)
# 用來設置圖像
label.setPixmap(image)
label.show()
app.exec_()

image.jpg圖片如下:

圖2

效果圖:

圖3

看左上角尺上,在這個圖像上畫了一個矩形。
因為這個繪圖是直接在圖像上繪圖史飞,而不是在widget上(代碼中的label只是用來顯示)尖昏,所以可以在paintEvent以外進行操作。

友情鏈接
QPainter
QPaintDevice
QPaintEngine
QPixmap

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末构资,一起剝皮案震驚了整個濱河市抽诉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吐绵,老刑警劉巖迹淌,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件河绽,死亡現(xiàn)場離奇詭異,居然都是意外死亡唉窃,警方通過查閱死者的電腦和手機耙饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纹份,“玉大人苟跪,你說我怎么就攤上這事÷В” “怎么了件已?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長元暴。 經(jīng)常有香客問我篷扩,道長,這世上最難降的妖魔是什么茉盏? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任鉴未,我火速辦了婚禮,結(jié)果婚禮上鸠姨,老公的妹妹穿的比我還像新娘铜秆。我一直安慰自己,他們只是感情好讶迁,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布羽峰。 她就那樣靜靜地躺著,像睡著了一般添瓷。 火紅的嫁衣襯著肌膚如雪梅屉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天鳞贷,我揣著相機與錄音坯汤,去河邊找鬼。 笑死搀愧,一個胖子當著我的面吹牛惰聂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咱筛,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搓幌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迅箩?” 一聲冷哼從身側(cè)響起溉愁,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饲趋,沒想到半個月后拐揭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撤蟆,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年堂污,在試婚紗的時候發(fā)現(xiàn)自己被綠了家肯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡盟猖,死狀恐怖讨衣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情式镐,我是刑警寧澤值依,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站碟案,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏颇蜡。R本人自食惡果不足惜价说,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望风秤。 院中可真熱鬧鳖目,春花似錦、人聲如沸缤弦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍沐。三九已至狸捅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間累提,已是汗流浹背尘喝。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斋陪,地道東北人朽褪。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像无虚,于是被迫代替她去往敵國和親缔赠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容