色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用QPushButton與QLabel組件實現一個簡單的批量圖像瀏覽

OpenCV學堂 ? 來源:OpenCV開發者聯盟 ? 2023-01-31 11:58 ? 次閱讀

引言

基于前面幾篇文章介紹的知識點,使用QPushButton與QLabel組件結合水平與垂直布局管理器,實現一個簡單的批量圖像瀏覽,支持圖像文件夾選擇、按鈕信號觸發與槽函數響應、支持上一張、下一張圖像瀏覽,實現一個最簡化版本的圖像瀏覽器

垂直與水平布局混合使用

PyQT5中的QWidget對象支持嵌套方式,在一個QWidget中可以支持多個子QWidget對象,每個QWidget都有自己的布局方式,這樣通過多重QWidget嵌套與疊加就可以實現復雜界面設計。在我開發OpenMV工具軟件過程中,多數子界面都是通過水平跟垂直布局嵌入實現的界面設計。這樣做的好處是避免使用絕對定位方式布局組件元素導致不同分辨率的顯示差異與用戶體驗不一致。

e280a1de-a113-11ed-bfe3-dac502259ad0.png

上圖中第一行有三個組元素,兩個QLabel,分別顯示當前文件路徑與文件夾總圖像數目;一個按鈕實現圖像文件夾選擇功能,三個組件元素在一個子QWidget對象(panel1)中通過水平布局方式(QHBoxLayout)從左到右排列。

內置圖標ICON使用

PyQT5的QStyle支持內置圖標ICON支持,支持常見應用程序開發所需要的圖標,直接使用這些圖標可以省去很多麻煩。支持的圖標列表請看下圖說明:

e2a518ac-a113-11ed-bfe3-dac502259ad0.png

采用下面的相似代碼即可獲取需要的ICON圖標使用。

back_pix = QtWidgets.QStyle.SP_ArrowBack
back_icon = self.style().standardIcon(back_pix)
圖表文件名稱列表如下:

e2cf4906-a113-11ed-bfe3-dac502259ad0.png

中間是一個QLabel組件實現圖像顯示與更新功能 最后一行基于PyQT5的QStyle中內置圖標引用實現了兩個ICON按鈕功能,支持Tooltip提示功能,分別實現顯示上一張與下一張圖像切換顯示功能。兩個ICON按鈕通過水平布局方式同樣放在一個QWidget對象(panel2)中。

最終把panel1、imageLabel、panel2三個子元素通過垂直布局(QVBoxLayout)添加到自定義的QWidget對象-ImageBrowserPanel

最后在主程序中初始化ImageBrowserPanel對象實例,設置為QMainWindow的CenteralWidget即可完成。

按鈕信號與響應

三個按鈕分別完成圖像文件夾選擇、上一張更新顯示、下一張更新顯示。默認選擇圖像文件夾之后會顯示該文件夾中第一張圖像,同時更新文件顯示QLabel上顯示信息與imageLabel上顯示的圖像內容。

運行演示與代碼

運行結果演示:

e2e62db0-a113-11ed-bfe3-dac502259ad0.gif

主面板界面類代碼如下:


class ImageBrowserPanel(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.image_files = []
        self.current_index = -1
        # 文本標簽
        self.pathLabel = QtWidgets.QLabel()
        self.pathLabel.setText("文件名稱: test.png")
        self.pathLabel.setStyleSheet("background-color:deeppink; color: blue; border-radius:5px")
        self.pathLabel.setAlignment(QtCore.Qt.AlignCenter)
        # 圖像總數
        self.numLabel = QtWidgets.QLabel()
        self.numLabel.setText("圖像總數: 0")
        self.pathLabel.setStyleSheet("background-color:deeppink; color: blue; border-radius:5px")
        self.numLabel.setAlignment(QtCore.Qt.AlignCenter)


        fileBtn = QtWidgets.QPushButton("選擇...")
        hbox_layout = QtWidgets.QHBoxLayout()
        hbox_layout.addWidget(self.pathLabel)
        hbox_layout.addWidget(self.numLabel)
        hbox_layout.addWidget(fileBtn)
        hbox_layout.addStretch(1)
        panel1 = QtWidgets.QGroupBox("圖像信息")
        panel1.setLayout(hbox_layout)


        # 圖像標簽
        self.imgLabel = QtWidgets.QLabel()
        pixmap = QtGui.QPixmap("test3.png")
        pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
        self.imgLabel.setPixmap(pix)
        self.imgLabel.setAlignment(QtCore.Qt.AlignCenter)


        # 左右瀏覽
        back_pix = QtWidgets.QStyle.SP_ArrowBack
        back_icon = self.style().standardIcon(back_pix)


        forward_pix = QtWidgets.QStyle.SP_ArrowForward
        forward_icon = self.style().standardIcon(forward_pix)


        backBtn = QtWidgets.QPushButton(back_icon, "")
        backBtn.setIconSize(QtCore.QSize(48, 48))
        backBtn.setToolTip("上一張")


        forwardBtn = QtWidgets.QPushButton(forward_icon, "")
        forwardBtn.setIconSize(QtCore.QSize(48, 48))
        forwardBtn.setToolTip("下一張")


        panel2 = QtWidgets.QWidget()
        hbox_layout2 = QtWidgets.QHBoxLayout()
        hbox_layout2.addWidget(backBtn)
        hbox_layout2.addWidget(forwardBtn)
        panel2.setLayout(hbox_layout2)


        # 添加到布局管理器中
        vbox_layout = QtWidgets.QVBoxLayout()
        vbox_layout.addWidget(panel1)
        vbox_layout.addWidget(self.imgLabel)
        vbox_layout.addWidget(panel2)
        vbox_layout.addStretch(1)


        # 面板容器
        self.setLayout(vbox_layout)


        # setup listener
        fileBtn.clicked.connect(self.on_select_image_dir)
        backBtn.clicked.connect(self.on_back_image_view)
        forwardBtn.clicked.connect(self.on_forward_image_view)


    def on_back_image_view(self):
        if self.current_index > 0:
            self.current_index = self.current_index - 1
            filename = self.image_files[self.current_index]
            self.pathLabel.setText("文件名稱: " + filename)
            print(filename)
            pixmap = QtGui.QPixmap(filename)
            pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
            self.imgLabel.setPixmap(pix)


    def on_forward_image_view(self):
        last = len(self.image_files) - 1
        if self.current_index < last:
            self.current_index = self.current_index + 1
            filename = self.image_files[self.current_index]
            self.pathLabel.setText("文件名稱: " + filename)
            print(filename)
            pixmap = QtGui.QPixmap(filename)
            pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
            self.imgLabel.setPixmap(pix)


    def on_select_image_dir(self):
        img_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "圖像文件夾", ".")
        files = os.listdir(img_dir)
        self.image_files.clear()
        self.current_index = -1
        for f in files:
            if f.endswith(".png") or f.endswith(".jpg") or f.endswith(".bmp"):
                self.image_files.append(os.path.join(img_dir, f))
        if len(self.image_files) > 0:
            self.current_index = 0
            filename = self.image_files[0]
            print(filename)
            self.pathLabel.setText("文件名稱: " + filename)
            self.numLabel.setText("圖像總數: " + str(len(self.image_files)))
            pixmap = QtGui.QPixmap(filename)
            pix = pixmap.scaled(QtCore.QSize(620, 500), QtCore.Qt.KeepAspectRatio)
            self.imgLabel.setPixmap(pix)
上述代碼演示了如何打開文件夾,遍歷圖像文件、如何更新QLabel上顯示的圖像與文字信息,如何構建一個自定義的QWidget對象。

QApplication應用程序代碼如下:

# 初始化APP實例
app = QtWidgets.QApplication(sys.argv)
# 初始化桌面容器
main_win = QtWidgets.QMainWindow()
# 設置APP窗口名稱
main_win.setWindowTitle("PyQT5圖像瀏覽器-2號高手")
# 初始化內容面板
content_panel = ImageBrowserPanel()
# 設置窗口大小
main_win.setMinimumSize(640, 500)
main_win.setCentralWidget(content_panel)


# 請求顯示
main_win.show()
# 加載窗口并啟動App
app.exec()

運行結果如下:

e2f655f0-a113-11ed-bfe3-dac502259ad0.png?總結

本文主要是演示了PyQT5中水平與垂直布局組合,多個QWidget組件嵌套使用排版,按鈕事件觸發與槽函數更新UI組件的各種PyQT5基本編程技能與技巧。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • pyqt5
    +關注

    關注

    0

    文章

    25

    瀏覽量

    3403
  • openMV
    +關注

    關注

    3

    文章

    39

    瀏覽量

    9823

原文標題:PyQT5開發案例之簡易圖像瀏覽器

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Visual C# 打造 “瀏覽器”

    “AxSHDocVw”,在此命名空間中定義了“AxWebBrowser”組件,這個組件中有若干個方法和屬性,Visual C#就是通過這些方法和屬性來
    發表于 02-20 10:25

    關于QT中使用pixmap進行圖片的切換問題

    /my_program/picture/picture.jpg"; QLabel *label=new QLabel; button_change=new QPushButton("
    發表于 01-20 15:04

    《Visual C# 2008程序設計經典案例設計與實現》---利用TreeView控件瀏覽圖像

    《Visual C# 2008程序設計經典案例設計與實現》---利用TreeView控件瀏覽圖像.zip
    發表于 05-22 21:05

    如何才能允許組件分組并添加簡單的片外終端組件

    包含在組中。這兩問題的很好的解決方案是允許組件被分組并且具有非常
    發表于 10-18 09:53

    請問怎么把STM32F7NG寫成簡單瀏覽器?

    怎么可以把STM32F7NG寫成簡單瀏覽器,能顯示只有圖片和文字的HTML代碼或文件.
    發表于 03-10 05:14

    使用JS實現簡單的HarmonyOS購物應用

    1. 介紹本篇Codelab將會使用UI組件開發出HarmonyOS購物應用。HarmonyOS為開發者提供了多種組件,每個組件通過對數
    發表于 09-23 10:40

    怎么去解決QLabel控件無法播放GIF動畫的問題

    ubuntu系統上gif動畫播放正常,移植到arm上的應用程序是正常啟動的,但QLabel控件上無法播放GIF動畫。QLabel控件上圖片是可以正常顯示的。 QMovie *movie = new
    發表于 01-10 07:40

    【飛凌RK3568開發板試用體驗】5-Qt開發相冊瀏覽

    本篇繼續來實現Qt相冊瀏覽器軟件,可以實現OK3568-C板子中圖片的查看,方便后面制作相機拍照功能后,可以查看拍出的照片,先來看下最終
    發表于 12-08 22:32

    基于Mobile的手機流媒體實時圖像瀏覽客戶端設計

    本文主要闡述基于Mobile 的手機流媒體實時圖像瀏覽客戶端的軟件設計,此軟件是通過軟件仿真實現基于Windows Mobile的流媒
    發表于 09-27 10:41 ?1134次閱讀
    基于Mobile的手機流媒體實時<b class='flag-5'>圖像</b><b class='flag-5'>瀏覽</b>客戶端設計

    comicsviewer圖像瀏覽器軟件

    電子發燒友網站提供《comicsviewer圖像瀏覽器軟件.zip》資料免費下載
    發表于 06-19 17:00 ?0次下載

    使用Visual Baisc實現簡單的文件瀏覽器的程序和工程文件

    本文檔的主要內容詳細介紹的是使用Visual Baisc實現簡單的文件瀏覽器的程序和工程文件。
    發表于 09-18 16:48 ?14次下載
    使用Visual Baisc<b class='flag-5'>實現</b><b class='flag-5'>簡單</b>的文件<b class='flag-5'>瀏覽</b>器的程序和工程文件

    易于使用的openharmony圖像組件PhotoView的實現

    PhotoView 旨在幫助生成易于使用的縮放 openharmony 圖像組件實現。 特征: 開箱即用的縮放,使用多點觸控和雙擊。
    發表于 04-11 10:30 ?2次下載

    QT|編寫簡單的上位機

    QT | 編寫簡單的上位機 時間 :2023-03-19文章目錄QT | 編寫簡單的上位
    發表于 05-08 10:12 ?3次下載
    QT|編寫<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的上位機

    如何用BUCK電路簡單實現可靠的負電源?

    如何用BUCK電路簡單實現可靠的負電源?
    的頭像 發表于 12-05 15:12 ?827次閱讀
    如何用BUCK電路<b class='flag-5'>簡單</b><b class='flag-5'>實現</b><b class='flag-5'>一</b><b class='flag-5'>個</b>可靠的負電源?

    簡單的分頻器電路分享

    這是簡單的分頻器電路,該電路的優點是電路小,它僅使用晶體管和其他幾個組件
    的頭像 發表于 06-10 15:55 ?1436次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的分頻器電路分享
    主站蜘蛛池模板: 四虎4hu亚洲精品| 日本漂亮妈妈7观整有限中| 国产69精品麻豆久久久久| free高跟丝袜秘书hd| 91看片淫黄大片.在线天堂| 永久adc视频年龄确认| 亚洲色播永久网址大全| 亚洲AV综合99一二三四区| 手机看片成人| 婷婷综合亚洲爱久久| 天美麻豆成人AV精品| 伸进同桌奶罩里摸她胸作文| 日日摸夜夜添无码AVA片| 日韩毛片大全| 色姊姊真舒服| 甜性涩爱全集在线观看| 小学生偷拍妈妈视频遭性教育 | 男女全黄h全肉细节文| 久久综合中文字幕无码| 美女国产毛片A区内射| 免费一区二区三区久久| 久久成人午夜电影mp4| 最近日本免费观看MV免费| 肉多的小说腐小说| 手机在线免费| 亚洲国产欧美国产综合在线| 亚洲爆乳少妇精品无码专区| 亚洲欧洲日韩天堂无吗| 最近免费中文字幕大全免费| 99热只有精品| 高傲教师麻麻被同学调教123| 国产传媒在线播放| 好紧好湿太硬了我太爽了小说| 久久aa毛片免费播放嗯啊| 老头操美女| 欧美一区二区视频在线观看| 色偷偷888欧美精品久久久| 亚洲国产成人精品无码区99| 一道本在线伊人蕉无码| 2018三级网站免费观看| 饱满奶大30p|