python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
流式布局
流式布局,也叫做瀑布流布局,是网页中经常使用的一种页面布局方式,它的原理就是将高度固定,然后图片的宽度自适应,这样加载出来的图片看起来就像瀑布一样整齐的水流淌下来。
pyqt流式布局
那么在pyqt5中我们怎么使用流式布局呢?pyqt没有这个控件,需要我们自己去封装,下面是流式布局的封装代码。
classFlowLayout(QLayout): def__init__(self,parent=None,margin=0,spacing=-1): super(FlowLayout,self).__init__(parent) ifparentisnotNone: self.setContentsMargins(margin,margin,margin,margin) self.setSpacing(spacing) self.itemList=[] def__del__(self): item=self.takeAt(0) whileitem: item=self.takeAt(0) defaddItem(self,item): self.itemList.append(item) defcount(self): returnlen(self.itemList) defitemAt(self,index): ifindex>=0andindex=0andindex rect.right()andlineHeight>0: x=rect.x() y=y+lineHeight+spaceY nextX=x+item.sizeHint().width()+spaceX lineHeight=0 ifnottestOnly: item.setGeometry(QRect(QPoint(x,y),item.sizeHint())) x=nextX lineHeight=max(lineHeight,item.sizeHint().height()) returny+lineHeight-rect.y()
封装好的流式布局类,我们只要传入相应的layout之后,他就会自动计算页面的元素,适应页面的宽度。
下面是我们写的一个瀑布流显示图片的代码:
fromPyQt5.QtCoreimportQPoint,QRect,QSize,Qt
importos
fromPyQt5importQtCore,QtGui,QtWidgets
fromPyQt5.QtWidgetsimport(
QApplication,QLayout,QPushButton,QSizePolicy,QWidget,QGridLayout)
classWindow(QWidget):
def__init__(self):
self.imageheight=100
super(Window,self).__init__()
self.resize(400,300)
flowLayout=FlowLayout()
highlight_dir="./"
self.files_it=iter([os.path.join(highlight_dir,file)
forfileinos.listdir(highlight_dir)])
print()
forfileiniter(self.files_it):
layout=QGridLayout()
pixmap=QtGui.QPixmap(file)
ifnotpixmap.isNull():
autoWidth=pixmap.width()*self.imageheight/pixmap.height()
label=QtWidgets.QLabel(pixmap=pixmap)
label.setScaledContents(True)
label.setFixedHeight(self.imageheight)
print(autoWidth)
label.setFixedWidth(autoWidth)
#label.setFixedSize(100,50)
layout.addWidget(label)
widget=QWidget()
widget.setLayout(layout)
flowLayout.addWidget(widget)
self.setLayout(flowLayout)
self.setWindowTitle("FlowLayout")
classFlowLayout(QLayout):
def__init__(self,parent=None,margin=0,spacing=-1):
super(FlowLayout,self).__init__(parent)
ifparentisnotNone:
self.setContentsMargins(margin,margin,margin,margin)
self.setSpacing(spacing)
self.itemList=[]
def__del__(self):
item=self.takeAt(0)
whileitem:
item=self.takeAt(0)
defaddItem(self,item):
self.itemList.append(item)
defcount(self):
returnlen(self.itemList)
defitemAt(self,index):
ifindex>=0andindex=0andindexrect.right()andlineHeight>0:
x=rect.x()
y=y+lineHeight+spaceY
nextX=x+item.sizeHint().width()+spaceX
lineHeight=0
ifnottestOnly:
item.setGeometry(QRect(QPoint(x,y),item.sizeHint()))
x=nextX
lineHeight=max(lineHeight,item.sizeHint().height())
returny+lineHeight-rect.y()
if__name__=='__main__':
importsys
app=QApplication(sys.argv)
mainWin=Window()
mainWin.show()
sys.exit(app.exec_())
到此这篇关于pythonGUI框架pyqt5对图片进行流式布局的方法(瀑布流flowlayout)的文章就介绍到这了,更多相关pythonpyqt5图片流式布局内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。