国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python3使用PyQt5制作簡(jiǎn)單的畫(huà)板/手寫(xiě)板實(shí)例

2020-02-16 10:25:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.前言

版本:Python3.6.1 + PyQt5

寫(xiě)一個(gè)程序的時(shí)候需要用到畫(huà)板/手寫(xiě)板,只需要最簡(jiǎn)單的那種。原以為網(wǎng)上到處都是,結(jié)果找了好幾天,都沒(méi)有找到想要的結(jié)果。

網(wǎng)上的要么是非python版的qt程序(要知道qt版本之間差異巨大,還是非同一語(yǔ)言的),改寫(xiě)難度太大。要么是PyQt4的老程序,很多都已經(jīng)不能在PyQt5上運(yùn)行了。要么是大神寫(xiě)的特別復(fù)雜的程序,簡(jiǎn)直是直接做出了一個(gè)Windows自帶的畫(huà)圖版,只能膜拜~

于是我只能在眾多代碼中慢慢尋找自己需要的那一小部分,然后不斷地拼湊,不斷地理解大神的代碼,最終做出這么一個(gè)簡(jiǎn)單的畫(huà)板。望著這個(gè)簡(jiǎn)單的畫(huà)板我真是淚流滿面,中間數(shù)十次拼不對(duì)拼不全導(dǎo)致程序無(wú)數(shù)次崩潰,差點(diǎn)就放棄了......

2.簡(jiǎn)單的畫(huà)板1.0

在簡(jiǎn)單的畫(huà)板1.0這里,實(shí)現(xiàn)的功能是:在定點(diǎn)和移動(dòng)中的鼠標(biāo)所在處畫(huà)一條線
如圖所示:

鼠標(biāo)按住移動(dòng)的話,線也會(huì)跟著移動(dòng),從這個(gè)簡(jiǎn)單的程序開(kāi)始理解PyQt5的運(yùn)行機(jī)制吧。

''' 簡(jiǎn)單的畫(huà)板1.0 功能:在定點(diǎn)和移動(dòng)中的鼠標(biāo)所在處畫(huà)一條線 作者:PyLearn 最后修改日期: 2017/10/18'''import sysfrom PyQt5.QtWidgets import (QApplication, QWidget)from PyQt5.QtGui import (QPainter, QPen)from PyQt5.QtCore import Qtclass Example(QWidget): def __init__(self):  super(Example, self).__init__()  #resize設(shè)置寬高,move設(shè)置位置  self.resize(400, 300)  self.move(100, 100)  self.setWindowTitle("簡(jiǎn)單的畫(huà)板1.0")  #setMouseTracking設(shè)置為False,否則不按下鼠標(biāo)時(shí)也會(huì)跟蹤鼠標(biāo)事件  self.setMouseTracking(False)  #設(shè)置兩個(gè)變量接收移動(dòng)中的點(diǎn)的x、y坐標(biāo)  self.pos_x = 20  self.pos_y = 20 def paintEvent(self, event):  painter = QPainter()  painter.begin(self)  pen = QPen(Qt.black, 2, Qt.SolidLine)  painter.setPen(pen)  #定點(diǎn)(20, 20) 到 (self.pos_x, self.pos_y)之間畫(huà)線  painter.drawLine(20, 20, self.pos_x, self.pos_y)  painter.end() def mouseMoveEvent(self, event):  '''   按住鼠標(biāo)移動(dòng)事件:更新pos_x和pos_y的值   調(diào)用update()函數(shù)在這里相當(dāng)于調(diào)用paintEvent()函數(shù)   每次update()時(shí),之前調(diào)用的paintEvent()留下的痕跡都會(huì)清空  '''  self.pos_x = event.pos().x()  self.pos_y = event.pos().y()  self.update()if __name__ == "__main__": app = QApplication(sys.argv) pyqt_learn = Example() pyqt_learn.show() app.exec_()

3.簡(jiǎn)單的畫(huà)板2.0

從以上的簡(jiǎn)單的畫(huà)板1.0程序的運(yùn)行可以發(fā)現(xiàn),按住鼠標(biāo)移動(dòng)的時(shí)候,線也會(huì)跟著移動(dòng),那如何讓之前的線留下痕跡,而不是消失呢?

在簡(jiǎn)單的畫(huà)板2.0中,使用一個(gè)列表保存所有移動(dòng)過(guò)的點(diǎn),然后要畫(huà)線的時(shí)候,循環(huán)遍歷列表,依次畫(huà)出列表中點(diǎn)到定點(diǎn)之間的線即可。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贵州省| 明溪县| 仙居县| 临夏市| 沁阳市| 甘谷县| 宿松县| 安泽县| 肥西县| 本溪| 东莞市| 敦化市| 大兴区| 华容县| 北京市| 麻城市| 昭觉县| 澄城县| 观塘区| 舞钢市| 白朗县| 容城县| 黎城县| 阿城市| 封丘县| 昆山市| 康平县| 永和县| 常宁市| 兴宁市| 抚州市| 呼图壁县| 吴忠市| 凤台县| 通山县| 湖南省| 黑水县| 盖州市| 涿州市| 芮城县| 密云县|