日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python GUI框架pyqt5 對圖片進行流式布局的方法(瀑布流flowlayout)

瀏覽:200日期:2022-08-02 16:20:43

流式布局

流式布局,也叫做瀑布流布局,是網頁中經常使用的一種頁面布局方式,它的原理就是將高度固定,然后圖片的寬度自適應,這樣加載出來的圖片看起來就像瀑布一樣整齊的水流淌下來。

pyqt流式布局

那么在pyqt5中我們怎么使用流式布局呢?pyqt沒有這個控件,需要我們自己去封裝,下面是流式布局的封裝代碼。

class FlowLayout(QLayout): def __init__(self, parent=None, margin=0, spacing=-1): super(FlowLayout, self).__init__(parent) if parent is not None: self.setContentsMargins(margin, margin, margin, margin) self.setSpacing(spacing) self.itemList = [] def __del__(self): item = self.takeAt(0) while item: item = self.takeAt(0) def addItem(self, item): self.itemList.append(item) def count(self): return len(self.itemList) def itemAt(self, index): if index >= 0 and index < len(self.itemList): return self.itemList[index] return None def takeAt(self, index): if index >= 0 and index < len(self.itemList): return self.itemList.pop(index) return None def expandingDirections(self): return Qt.Orientations(Qt.Orientation(0)) def hasHeightForWidth(self): return True def heightForWidth(self, width): height = self.doLayout(QRect(0, 0, width, 0), True) return height def setGeometry(self, rect): super(FlowLayout, self).setGeometry(rect) self.doLayout(rect, False) def sizeHint(self): return self.minimumSize() def minimumSize(self): size = QSize() for item in self.itemList: size = size.expandedTo(item.minimumSize()) margin, _, _, _ = self.getContentsMargins() size += QSize(2 * margin, 2 * margin) return size def doLayout(self, rect, testOnly): x = rect.x() y = rect.y() lineHeight = 0 for item in self.itemList: wid = item.widget() spaceX = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton,QSizePolicy.PushButton, Qt.Horizontal) spaceY = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton,QSizePolicy.PushButton, Qt.Vertical) nextX = x + item.sizeHint().width() + spaceX if nextX - spaceX > rect.right() and lineHeight > 0: x = rect.x() y = y + lineHeight + spaceY nextX = x + item.sizeHint().width() + spaceX lineHeight = 0 if not testOnly: item.setGeometry(QRect(QPoint(x, y), item.sizeHint())) x = nextX lineHeight = max(lineHeight, item.sizeHint().height()) return y + lineHeight - rect.y()

封裝好的流式布局類,我們只要傳入相應的layout之后,他就會自動計算頁面的元素,適應頁面的寬度。

下面是我們寫的一個瀑布流顯示圖片的代碼:

from PyQt5.QtCore import QPoint, QRect, QSize, Qtimport osfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import ( QApplication, QLayout, QPushButton, QSizePolicy, QWidget, QGridLayout)class Window(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) for file in os.listdir(highlight_dir)]) print() for file in iter(self.files_it): layout = QGridLayout() pixmap = QtGui.QPixmap(file) if not pixmap.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('Flow Layout')class FlowLayout(QLayout): def __init__(self, parent=None, margin=0, spacing=-1): super(FlowLayout, self).__init__(parent) if parent is not None: self.setContentsMargins(margin, margin, margin, margin) self.setSpacing(spacing) self.itemList = [] def __del__(self): item = self.takeAt(0) while item: item = self.takeAt(0) def addItem(self, item): self.itemList.append(item) def count(self): return len(self.itemList) def itemAt(self, index): if index >= 0 and index < len(self.itemList): return self.itemList[index] return None def takeAt(self, index): if index >= 0 and index < len(self.itemList): return self.itemList.pop(index) return None def expandingDirections(self): return Qt.Orientations(Qt.Orientation(0)) def hasHeightForWidth(self): return True def heightForWidth(self, width): height = self.doLayout(QRect(0, 0, width, 0), True) return height def setGeometry(self, rect): super(FlowLayout, self).setGeometry(rect) self.doLayout(rect, False) def sizeHint(self): return self.minimumSize() def minimumSize(self): size = QSize() for item in self.itemList: size = size.expandedTo(item.minimumSize()) margin, _, _, _ = self.getContentsMargins() size += QSize(2 * margin, 2 * margin) return size def doLayout(self, rect, testOnly): x = rect.x() y = rect.y() lineHeight = 0 for item in self.itemList: wid = item.widget() spaceX = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton,QSizePolicy.PushButton, Qt.Horizontal) spaceY = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton,QSizePolicy.PushButton, Qt.Vertical) nextX = x + item.sizeHint().width() + spaceX if nextX - spaceX > rect.right() and lineHeight > 0:x = rect.x()y = y + lineHeight + spaceYnextX = x + item.sizeHint().width() + spaceXlineHeight = 0 if not testOnly:item.setGeometry(QRect(QPoint(x, y), item.sizeHint())) x = nextX lineHeight = max(lineHeight, item.sizeHint().height()) return y + lineHeight - rect.y()if __name__ == ’__main__’: import sys app = QApplication(sys.argv) mainWin = Window() mainWin.show() sys.exit(app.exec_())

到此這篇關于python GUI框架pyqt5 對圖片進行流式布局的方法(瀑布流flowlayout)的文章就介紹到這了,更多相關python pyqt5圖片流式布局內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人免费一区| 国产精品日韩精品中文字幕| 欧美久久久网站| 亚洲深爱激情| 蜜桃一区二区三区在线观看| 日本亚洲欧洲无免费码在线| 国产欧美一区二区色老头| 欧美午夜网站| 久久不见久久见免费视频7 | 日韩在线第七页| 日韩精品视频中文字幕| 久久国产精品色av免费看| 国产模特精品视频久久久久| 国产成人精品免费视| 美女国产精品久久久| 老司机免费视频一区二区| av最新在线| 99精品在线观看| 亚洲在线一区| 国产伦一区二区三区| 亚洲精品成人图区| 免费观看久久av| 日韩专区欧美专区| 日本欧美大码aⅴ在线播放| 久久精品99国产精品日本| 国产一区二区三区不卡av | 亚洲免费精品| 亚洲天堂1区| 伊人久久大香线蕉av不卡| 久久久精品久久久久久96 | 日韩在线观看一区二区| 亚洲精品一区二区在线看| 日韩激情综合| av综合电影网站| 在线观看一区| 国产精一区二区| 久久激情av| 人人香蕉久久| 日韩不卡在线观看日韩不卡视频| 麻豆91在线播放| 久久精品国产99久久| 国产精品一区二区三区美女| 激情欧美亚洲| 久久精品资源| 男人天堂欧美日韩| 麻豆成全视频免费观看在线看| 国产精品日韩欧美一区| 国产欧美日韩视频在线| 99久久久久国产精品| 欧美日韩精品一区二区三区视频 | 欧美日韩国产高清电影| 蜜桃av一区二区在线观看| 91一区二区| 天堂俺去俺来也www久久婷婷| 亚洲欧美久久| 老司机精品视频网| 日韩在线播放一区二区| 日韩在线综合| 国产精品久久亚洲不卡| 石原莉奈一区二区三区在线观看| 欧美+亚洲+精品+三区| 日本欧美一区二区| 午夜日韩av| 成人黄色av| 国产毛片精品| 蜜桃视频在线观看一区| av在线日韩| 国产福利一区二区精品秒拍| 午夜久久av| 偷拍欧美精品| 免费在线小视频| 欧美激情久久久久久久久久久| 日韩精品亚洲专区| 久久美女精品| 韩国一区二区三区视频| 青青青国产精品| 亚洲图片久久| 日韩午夜免费| 成人片免费看| 麻豆国产91在线播放| 欧美精品三级在线| 欧美一级专区| 欧美不卡高清| 欧美日韩水蜜桃| 999国产精品视频| 日韩中文影院| 色在线视频观看| 国产不卡一区| 日本一区二区高清不卡| 欧美日韩一区自拍| 亚洲乱码久久| 亚洲综合五月| 国产91久久精品一区二区| 精品国产午夜肉伦伦影院 | 欧美日韩视频一区二区三区| 久久久国产精品网站| 日韩av一级片| 日韩在线黄色| 日韩va亚洲va欧美va久久| 亚洲精品第一| 日韩激情av在线| 国产乱论精品| 手机在线电影一区| 日韩成人高清| 欧美日韩国产综合网| 午夜久久tv| 中文一区在线| 亚洲不卡视频| 国产剧情在线观看一区| 久久精品福利| 欧美精品日日操| 婷婷亚洲综合| 视频在线观看91| 91综合久久爱com| 精品欧美日韩精品| 999国产精品永久免费视频app| 综合激情在线| 综合国产在线| 国产美女精品视频免费播放软件| 日韩欧美自拍| 丰满少妇一区| 国产成人免费av一区二区午夜| 亚洲一区二区成人| 丝袜a∨在线一区二区三区不卡| 免费亚洲一区| 国产aⅴ精品一区二区三区久久| 免费人成网站在线观看欧美高清| 亚洲精品裸体| 日韩一区二区三区精品视频第3页| av在线日韩| 好吊日精品视频| 日韩三级精品| 日本一区二区高清不卡| 黄色成人在线网址| 欧美在线看片| 久久青青视频| 免费在线欧美视频| 毛片不卡一区二区| 一区二区亚洲精品| 91精品福利观看| 四虎国产精品免费观看| 亚洲激情偷拍| 免费看一区二区三区| 性欧美xxxx免费岛国不卡电影| 国产精品v一区二区三区| 国产精品xxx| 欧美午夜精彩| 国产日韩亚洲欧美精品| 久久久夜夜夜| 91p九色成人| 久久精品免视看国产成人| 激情综合网址| 国产精品v日韩精品v欧美精品网站 | 精品高清久久| 亚洲精品1区2区| 国产激情久久| 久久成人精品| 91综合视频| 日本视频一区二区| 亚洲特级毛片| 国产在线观看91一区二区三区| 日韩精品中文字幕吗一区二区| 欧美日韩水蜜桃| 亚洲tv在线| 国产suv精品一区二区四区视频| 不卡视频在线| 国产精品视频一区视频二区| 亚洲高清不卡| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 亚洲资源网站| 在线手机中文字幕| 91精品国产一区二区在线观看| 亚洲欧美日韩国产一区| 欧美在线91| 丝袜美腿亚洲一区| 99久久久久国产精品| 精品欧美视频| 国产亚洲人成a在线v网站| 99热精品在线| 久久中文字幕av| 美女一区网站| 激情综合五月| 国产亚洲精品精品国产亚洲综合| 日韩avvvv在线播放| 亚洲一级特黄| 亚洲精品一级二级| 久久亚洲人体| 国产精品videossex久久发布| 国产精品成人国产| 香蕉精品视频在线观看| 国产一区二区三区日韩精品| 国产探花一区二区| 91亚洲无吗| 日韩精品亚洲一区二区三区免费| 国产精品久久久久久久久免费高清 | 亚洲免费观看高清完整版在线观| 日韩中文字幕不卡| 国产精品高颜值在线观看| 国产精品一线| 欧美日韩va|