PyQT5中常用的布局管理方式运行与代码

qgridlayout介绍
之前的文章介绍了pyqt5的水平与垂直两种布局方式,本文介绍网格布局方式,网格布局同样是pyqt5中常用的布局管理方式之一,网格布局方式支持相同尺寸网格跟自定义网格大小。按顺序填充每个网格,从左到右、从上到下
还可以选择性填写部分网格,生产错位的组件排列,qgridlayout也支持一下的组件布局方式:
qgridlayout类与方法
往qgridlayout网格布局中添加qwidget对象的函数为:
qtwidgets.qgridlayout.addwidget(widget, row, column) 默认添加到网格中的每个网格大小一致。可以调用行跟列的比率设置函数设置行或者列的按比率显示,这样可以实现不同网格大小。相关支持函数如下:void setcolumnstretch ( int column, int stretch )void setrowstretch ( int row, int stretch )
上图是每一列设置不同显示比率,以此类推对行也可以这样设置。
运行演示与代码
代码实现部分,通过一个自定义gridlayout布局支持的面板,结合qlabel组件,完成了个多图像大图预览的布局排序。主要代码可以参考这里:
pyqt5开发案例之简易图像浏览器
运行结果演示
gridlayout面板界面类代码如下
import osfrom pyqt5 import qtwidgets, qtcore, qtguiimport sysclass imagebrowserpanel(qtwidgets.qwidget):    def __init__(self, parent=none):        super().__init__(parent)        self.image_files = []        self.current_index = -1        self.grid_labels = []        # 文本标签        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)        # 图像标签        panel3 = qtwidgets.qwidget()        grid_layout = qtwidgets.qgridlayout()        for i in range(9):            item_label = qtwidgets.qlabel()            item_label.setstylesheet(background-color:royalblue; border-radius:5px)            pixmap = qtgui.qpixmap(test3.png)            pix = pixmap.scaled(qtcore.qsize(210, 160), qtcore.qt.keepaspectratio)            item_label.setpixmap(pix)            item_label.setalignment(qtcore.qt.aligncenter)            grid_layout.addwidget(item_label, int(i/3), int(i%3))            self.grid_labels.append(item_label)        panel3.setlayout(grid_layout)        # 添加到布局管理器中        vbox_layout = qtwidgets.qvboxlayout()        vbox_layout.addwidget(panel1)        vbox_layout.addwidget(panel3)        vbox_layout.addstretch(1)        # 面板容器        self.setlayout(vbox_layout)        # setup listener        filebtn.clicked.connect(self.on_select_image_dir)    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            self.numlabel.settext(图像总数:  + str(len(self.image_files)))            for im_file in self.image_files:                pixmap = qtgui.qpixmap(im_file)                pix = pixmap.scaled(qtcore.qsize(210, 160), qtcore.qt.keepaspectratio)                self.grid_labels[self.current_index % 9].setpixmap(pix)                self.current_index = self.current_index + 1 选择一个文件夹之后运行结果如下:
总结
本文主要是演示了pyqt5网格布局使用,同时结合多个qlabel,显示更新多张图像。实现了图像的网格化显示预览功能。


特斯拉上海建厂,将促进我国新能源汽车产业快速发展
PCB评估过程中应注意哪些因素
一加4手机渲染视频流出:双摄新配色+6GB运行内存
如何实现Linux定时任务
家用无线路由器选购指南
PyQT5中常用的布局管理方式运行与代码
协作机器人应用对3D相机需求
如何开通局域网共享
布局智能衣护行业,昊用科技联合浙大展开深度战略合作!
CTA进网检验要求修订原则和变更说明 SAR新国标在2024年正式实施
发改委官员:谈低速电动车“转正”为时尚早
基于IMU和地磁传感器的导航系统设计
监控拾音器安装方法_监控拾音器安装接线图
带滞后作用的光激发精密报警器
电动单座调节阀泄漏的五大解决方式的介绍
微硬盘MP3的优点
主板支持内存的最大容量
Vishay宣布推出新系列超薄、大电流的IHLP®电感器---SGIHLP系列
IC测试常见问答
全球首发天玑 7200-Ultra 移动芯片,体验小金刚 Redmi Note 13 Pro+ 蜕变新生!