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+ 蜕变新生!