首页 > 其他分享 >PyQT5之网格布局多图片显示

PyQT5之网格布局多图片显示

时间:2024-06-04 18:22:58浏览次数:11  
标签:btn self 布局 网格 PyQT5 label path QtWidgets image

选择文件夹,显示图片

import os

from PyQt5 import QtWidgets
from PyQt5 import QtCore, QtGui
import sys
import cv2


class ButtonPanel(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.image_files = []
        self.image_labels = []
        self.img_idx = -1
        select_btn = QtWidgets.QPushButton("图像文件夹选择")
        # back_pix = QtWidgets.QStyle.SP_ArrowBack
        # back_icon = self.style().standardIcon(back_pix)     # 向后图标
        # back_btn = QtWidgets.QPushButton(back_icon, "")
        # back_btn.setToolTip("上一张...")                     # 鼠标悬停显示上一张
        # back_btn.setMinimumHeight(48)
        #
        # forward_pix = QtWidgets.QStyle.SP_ArrowForward
        # forward_icon = self.style().standardIcon(forward_pix)   # 向前图标
        # forward_btn = QtWidgets.QPushButton(forward_icon, "")
        # forward_btn.setToolTip("下一张...")                      # 鼠标悬停显示下一张
        # forward_btn.setMinimumHeight(48)

        self.path_label = QtWidgets.QLabel()
        self.path_label.setText("当前未显示图像路径")
        self.path_label.setAlignment(QtCore.Qt.AlignCenter)  # label上居中显示
        self.path_label.setMaximumHeight(50)  # label最大高度设置
        self.path_label.setStyleSheet("background-color:pink;color:green")  # 背景颜色设置
        font = QtGui.QFont()
        font.setBold(True)
        font.setPointSizeF(10)
        self.path_label.setFont(font)

        # self.image_label = QtWidgets.QLabel()

        # 方法二:使用cv2显示
        btn_panel = QtWidgets.QGroupBox("图像文件选择")
        hboxlayout = QtWidgets.QHBoxLayout()
        hboxlayout.addWidget(self.path_label)
        hboxlayout.addWidget(select_btn)
        hboxlayout.addStretch(1)
        btn_panel.setLayout(hboxlayout)
        
        grid_panel = QtWidgets.QGroupBox("网格显示")
        grid_layout = QtWidgets.QGridLayout()
        for i in range(9):
            image_label = QtWidgets.QLabel()
            image_label.setAlignment(QtCore.Qt.AlignCenter)  # label上的内容居中显示
            image_label.setStyleSheet("background-color:blue;color:green")  # 背景颜色设置
            image_label.setFixedSize(256, 256)
            self.image_labels.append(image_label)
            grid_layout.addWidget(image_label, int(i / 3), int(i % 3))    # 行、列

        grid_panel.setLayout(grid_layout)

        vboxlayout = QtWidgets.QVBoxLayout()
        vboxlayout.addWidget(btn_panel)
        vboxlayout.addWidget(grid_panel)
        vboxlayout.addStretch(1)
        self.setLayout(vboxlayout)

        # 绑定点击
        select_btn.clicked.connect(self.on_select_image_dir)

    def on_select_image_dir(self):
        # 获取文件夹地址
        curr_dir = QtWidgets.QFileDialog.getExistingDirectory(self, "图像文件夹", ".")
        files = os.listdir(curr_dir)
        self.image_files.clear()
        self.path_label.setText(curr_dir)

        for ind in range(len(files)):
            print(files[ind])
            if ind >= 9:
                break
            pixmap = QtGui.QPixmap(os.path.join(curr_dir, files[ind]))
            pix = pixmap.scaled(QtCore.QSize(246, 246), QtCore.Qt.KeepAspectRatio)  # 自动保持比例放缩方式
            self.image_labels[ind].setPixmap(pix)   # 设置图像显示


if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    main_win = QtWidgets.QMainWindow()
    main_win.setWindowTitle("图像网格化显示")
    myPanel = ButtonPanel()
    main_win.setCentralWidget(myPanel)
    main_win.setMinimumSize(1080, 720)
    main_win.show()
    app.exec_()

标签:btn,self,布局,网格,PyQT5,label,path,QtWidgets,image
From: https://www.cnblogs.com/jackchen28/p/18231459

相关文章

  • PyQT5之图片滚动
    图片滚动importosfromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2classButtonPanel(QtWidgets.QWidget):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)self.image_files=[]......
  • Java实现简易的计算器布局
    其实计算器本身的功能,每个编程语言本身就能实现,比如说我在python中敲击“3+2”的命令,返回值就是5。那么如果需要设计计算器,则关键的部分在于整个的算法页面布局,和功能的逻辑关系,以下我使用Java实现了计算器的布局即简易的功能。定义类Calculator的类,然后在中间添加容器界面,实......
  • PyQT5之QPushButton和布局
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2defclick_btn1():print("clickbutton1")txt_label.setText("我是按钮1点击之后")defclick_btn2():print("clickbutton2")defclick_......
  • Python--PyQT5图像
    fromPyQt5importQtCore,QtGuiimportsysimportcv2if__name__=='__main__':app=QtWidgets.QApplication(sys.argv)main_win=QtWidgets.QMainWindow()main_win.setWindowTitle("QLabel图像显示演示")image_label=QtWidge......
  • Python---PyQT5水平垂直布局
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2if__name__=='__main__':app=QtWidgets.QApplication(sys.argv)main_win=QtWidgets.QMainWindow()main_win.setWindowTitle("QLabel图像显示演示"......
  • Python---PyQT5之QPushButton
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysimportcv2classButtonPanel(QtWidgets.QWidget):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)select_btn=QtWidgets.QPushButton("......
  • PyQT5之label
    fromPyQt5importQtWidgetsfromPyQt5importQtCore,QtGuiimportsysif__name__=='__main__':app=QtWidgets.QApplication(sys.argv)main_win=QtWidgets.QMainWindow()main_win.setWindowTitle("我的第一个PyQT5应用")labe......
  • css网格布局
    CSS网格布局网格是一组相交的水平线和垂直线,它定义了网格的列和行。CSS提供了一个基于网格的布局系统,带有行和列,可以让我们更轻松地设计网页,而无需使用浮动和定位。以下是一个简单的网页布局,使用了网格布局,包含六列和三行:  »浏览器支持目前最新的一些浏览器版本......
  • 布局俄罗斯电商独立站正当时/附独立站收款
    大家都知道,俄罗斯是一个幅员辽阔的国家,国土跨越两个大陆,即欧洲和亚洲,横跨11个时区,与14个国家接壤,总人口为1.46亿人(俄乌战争后,可能没这么多了),是世界上人口最多的国家之一。俄罗斯总人口中有1.31亿人使用互联网,互联网普及率高达90%,普及率非常高!2023年俄罗斯GDP总额为2.24.万亿......
  • JavaFX 常见布局组件的使用
    Laytout简介JavaFX提供了多种布局管理器(LayoutManagers),它们用于自动管理用户界面组件的位置和大小。布局管理器可以简化UI设计,因为它们会根据窗口的大小变化自动调整其中的组件。布局组件JavaFX包含以下布局组件:布局名称中文说明AnchorPane锚点布局允许开发......