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

使用PyQt5實(shí)現(xiàn)圖片查看器的示例代碼

 更新時(shí)間:2020年04月21日 14:11:34   作者:TM0831  
這篇文章主要介紹了使用PyQt5實(shí)現(xiàn)圖片查看器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

在學(xué)習(xí) PyQt5 的過程中我會(huì)不斷地做一些小的 Demo,用于讓自己能夠更好地理解和學(xué)習(xí),這次要做的就是一個(gè)圖片查看器,主要功能包括打開圖片、拖動(dòng)圖片、放大和縮小圖片。

最終實(shí)現(xiàn)的圖片查看器你效果如下:

二、主要步驟

 1.顯示圖片

PyQt5 繪圖系統(tǒng)能渲染矢量圖像、位圖圖像和輪廓字體文本。一般會(huì)使用在修改或者提高現(xiàn)有組件的功能,或者創(chuàng)建自己的組件,使用 PyQt5 的繪圖 API 進(jìn)行操作。在 Qt 中有 QPainter 類用于執(zhí)行繪制的操作,繪圖由 paintEvent() 來完成,繪圖的代碼要放在 QPainter 對(duì)象的 start() 和 end() 方法之間。

要將圖片顯示出來,首先是繼承 QWidget,然后實(shí)現(xiàn) paintEvent() 方法,主要是使用 drawPixmap() 方法,需要傳入 QPixmap 對(duì)象并將其繪制出來,繪圖的代碼如下:

def paintEvent(self, e):
   """
   receive paint events
   :param e: QPaintEvent
   :return:
   """
   if self.scaled_img:
     painter = QPainter()
     painter.begin(self)
     painter.drawPixmap(self.point, self.scaled_img)
    painter.end()

2.拖動(dòng)圖片

在圖片成功顯示出來之后,需要能夠去拖動(dòng)圖片,以便于查看圖片的每個(gè)角落,主要得實(shí)現(xiàn)三個(gè)方法:mouseMoveEvent、mousePressEvent 和 mouseReleaseEvent,分別對(duì)應(yīng)移動(dòng)鼠標(biāo)、點(diǎn)擊鼠標(biāo)和松開鼠標(biāo)三個(gè)事件。

思路是獲取鼠標(biāo)點(diǎn)擊時(shí)的位置,然后根據(jù)鼠標(biāo)位置的變化來計(jì)算圖片需要移動(dòng)的距離,再移動(dòng)圖片就行了。具體代碼如下:

def mouseMoveEvent(self, e):
   """
   mouse move events for the widget
   :param e: QMouseEvent
   :return:
   """
   if self.left_click:
     self.end_pos = e.pos() - self.start_pos
     self.point = self.point + self.end_pos
     self.start_pos = e.pos()
     self.repaint()
 
 def mousePressEvent(self, e):
   """
   mouse press events for the widget
   :param e: QMouseEvent
   :return:
   """
   if e.button() == Qt.LeftButton:
     self.left_click = True
     self.start_pos = e.pos()
 
 def mouseReleaseEvent(self, e):
   """
   mouse release events for the widget
   :param e: QMouseEvent
   :return:
   """
   if e.button() == Qt.LeftButton:
     self.left_click = False

3.打開文件

有時(shí)候我們會(huì)想打開本地的文件進(jìn)行查看,所以還要實(shí)現(xiàn)一個(gè)打開文件的功能。而要實(shí)現(xiàn)這一功能,可以用 QFileDialog 類來實(shí)現(xiàn),該類里有一個(gè) getOpenFileName() 方法,使用該方法能夠打開本地路徑并選擇符合文件要求格式的文件,例如使用“*.png”就支持打開所有 png 格式的圖片文件,而不支持其他格式的文件。

getOpenFileName() 方法有兩個(gè)返回值,第一個(gè)返回值是所選擇的文件的路徑,第二個(gè)返回值是文件類型,得到文件路徑后就能創(chuàng)建一個(gè) QPixmap 對(duì)象,再使用前面顯示圖片的方法進(jìn)行顯示,具體代碼如下:

def open_image(self):
  """
  select image file and open it
  :return:
  """
  img_name, _ = QFileDialog.getOpenFileName(self, "Open Image File", "*.jpg;;*.png;;*.jpeg")
  self.box.set_image(img_name)

4.放大縮小圖片

在查看圖片的時(shí)候,有時(shí)候會(huì)需要放大了觀看圖片的某些細(xì)節(jié)部分,因而需要實(shí)現(xiàn)放大和縮小圖片的功能,所以做了兩個(gè)按鈕分別用于放大圖片和縮小圖片。

在 QPainter 中,可以根據(jù) QPainter 的坐標(biāo)系進(jìn)行各種變換,例如平移(translate)和變化(scale),這里就可以通過使用 scale() 方法實(shí)現(xiàn)放大和縮小圖片。下面是兩個(gè)按鈕點(diǎn)擊時(shí)觸發(fā)的方法的具體代碼:

 def large_click(self):
   """
   used to enlarge image
   :return:
   """
   if self.box.scale < :
     self.box.scale += .
     self.box.adjustSize()
     self.update()
 
 def small_click(self):
   """
   used to reduce image
   :return:
   """
   if self.box.scale > .:
     self.box.scale -= .
     self.box.adjustSize()
     self.update()

完整代碼已上傳到 GitHub !

到此這篇關(guān)于使用PyQt5實(shí)現(xiàn)圖片查看器的示例代碼的文章就介紹到這了,更多相關(guān)PyQt5 圖片查看器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)日期判斷和加減操作詳解

    Python實(shí)現(xiàn)日期判斷和加減操作詳解

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)日期的判斷,以及對(duì)日期的加減操作,文中的示例代碼對(duì)我們學(xué)習(xí)或工作有一定的價(jià)值,需要的可以參考一下
    2022-01-01
  • 關(guān)于Python的json字符串與json模塊解讀

    關(guān)于Python的json字符串與json模塊解讀

    這篇文章主要介紹了關(guān)于Python的json字符串與json模塊解讀,JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C,?C++,?C#,?Java,?JavaScript,?Perl,?Python等),這些特性使JSON成為理想的數(shù)據(jù)交換語言,需要的朋友可以參考下
    2023-07-07
  • django寫單元測(cè)試的方法

    django寫單元測(cè)試的方法

    這篇文章主要介紹了django寫單元測(cè)試的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Python詞云展示庫(kù)wordcloud配置詳解

    Python詞云展示庫(kù)wordcloud配置詳解

    這篇文章主要介紹了Python詞云展示庫(kù)wordcloud配置詳解,詞云就是將詞語通過圖形可視化的方式,直觀和藝術(shù)的展示出來,詞云在我們的生活中經(jīng)常能夠看到,無論是中文的詞云還是英文的詞云,需要的朋友可以參考下
    2023-07-07
  • python魔法方法-屬性訪問控制詳解

    python魔法方法-屬性訪問控制詳解

    下面小編就為大家?guī)硪黄猵ython魔法方法-屬性訪問控制詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • Python安裝Gradio和常見安裝問題解決辦法

    Python安裝Gradio和常見安裝問題解決辦法

    Gradio是一款便捷的Python庫(kù),專門用于創(chuàng)建機(jī)器學(xué)習(xí)模型的Web應(yīng)用,安裝通常簡(jiǎn)單,但偶爾會(huì)遇到依賴問題或環(huán)境配置錯(cuò)誤,這篇文章主要介紹了Python安裝Gradio和常見安裝問題解決辦法,需要的朋友可以參考下
    2024-10-10
  • python交換兩個(gè)變量的值方法

    python交換兩個(gè)變量的值方法

    今天小編就為大家分享一篇python交換兩個(gè)變量的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 如何利用Python+Vue實(shí)現(xiàn)簡(jiǎn)單的前后端分離

    如何利用Python+Vue實(shí)現(xiàn)簡(jiǎn)單的前后端分離

    因?yàn)閜ython開發(fā)的高效性,python web開發(fā)也受到越來越多人的關(guān)注,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+Vue實(shí)現(xiàn)簡(jiǎn)單的前后端分離的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python蛇形方陣的實(shí)現(xiàn)

    Python蛇形方陣的實(shí)現(xiàn)

    本文主要介紹了Python蛇形方陣的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Flask 數(shù)據(jù)庫(kù)集成的介紹

    Flask 數(shù)據(jù)庫(kù)集成的介紹

    這篇文章主要給大家分享了Flask 數(shù)據(jù)庫(kù)集成的介紹,數(shù)據(jù)庫(kù)是大多數(shù) Web 應(yīng)用的基礎(chǔ)設(shè)施,只要想把數(shù)據(jù)存儲(chǔ)下來,就離不開數(shù)據(jù)庫(kù),下面將一起學(xué)習(xí)一下如何給 Flask 應(yīng)用添加數(shù)據(jù)庫(kù)支持。下面詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11

最新評(píng)論

临猗县| 德江县| 遂宁市| 德保县| 化德县| 礼泉县| 桦川县| 泗洪县| 鹤峰县| 米林县| 康定县| 眉山市| 庆阳市| 鄂尔多斯市| 长子县| 车致| 乌海市| 嘉善县| 鄱阳县| 辽源市| 游戏| 仁怀市| 天全县| 茌平县| 沂源县| 和林格尔县| 保山市| 平潭县| 沙河市| 沅陵县| 广昌县| 墨脱县| 龙井市| 万州区| 邵武市| 贡觉县| 津南区| 崇义县| 平塘县| 视频| 茶陵县|