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

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

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

瀏覽:205日期: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久久,三上悠亚国产精品一区二区三区
国产一区二区三区视频在线| 久久中文欧美| 久久一区二区中文字幕| 国产传媒在线| 精品中文在线| 精品久久亚洲| 久久久久久夜| 欧美精品高清| 激情综合在线| 首页欧美精品中文字幕| 中文视频一区| 欧美日韩a区| 麻豆国产精品| 91综合视频| 国产综合亚洲精品一区二| 亚洲精品91| 在线观看一区| 国产精品欧美大片| 欧美国产小视频| 久久久久久久久久久妇女| 亚洲福利免费| 亚洲精品乱码久久久久久蜜桃麻豆 | 麻豆91在线播放| 亚洲天堂资源| 9色国产精品| 日韩av不卡一区二区| 久久av超碰| 久久中文字幕av| 蜜臀久久久99精品久久久久久| 午夜亚洲福利| 激情综合五月| 午夜欧美精品| 国产一卡不卡| 蜜桃视频在线网站| 喷白浆一区二区| 国产精品网址| 欧美日中文字幕| 日韩精品一区二区三区中文| 国精品产品一区| 日韩午夜在线| 国产欧美大片| 国产一区亚洲| 国产精品一区二区三区美女 | 久久av网址| 欧美日韩一二三四| 日韩激情视频网站| 日韩毛片在线| 日本免费新一区视频| 91日韩免费| 中文字幕一区二区三区四区久久| 久久97视频| 久久亚洲欧美| 国产福利电影在线播放| 亚洲中午字幕| 久久精品五月| 蜜臀a∨国产成人精品| 精品久久在线| 在线国产日韩| 久久久成人网| 国产精品一区二区精品视频观看 | 免费在线观看一区二区三区| 麻豆高清免费国产一区| 红桃视频国产一区| 老鸭窝一区二区久久精品| 亚洲欧美日韩视频二区| 久久男人天堂| 日本不卡高清| 亚洲午夜黄色| 久久精品国产99国产精品| 久久亚洲风情| 久久精品成人| 日韩avvvv在线播放| 日本午夜精品久久久| 久久精品国产福利| 热久久国产精品| 日韩伦理在线一区| 欧美中文高清| 夜久久久久久| 久久精品国产99国产精品| 久久国产精品毛片| 在线一区av| 国产精品免费99久久久| 日韩欧美中文| 国产精品久久久久久模特| 久久高清一区| 久久九九精品| 激情综合五月| 日本麻豆一区二区三区视频| 91久久久精品国产| 亚洲最新无码中文字幕久久| 国产女人18毛片水真多18精品| 视频一区二区三区在线| 99久久精品费精品国产| 精品高清久久| 欧洲一区二区三区精品| 国产精品手机在线播放| 夜久久久久久| 国产一区福利| 国产精品一区二区精品视频观看 | 免费精品一区| 欧美日韩亚洲一区二区三区在线| 夜夜精品视频| 99久久亚洲精品| 欧美日韩国产观看视频| 国产精品九九| 国产欧美精品| 国产亚洲观看| 欧美日韩99| 国产亚洲观看| 欧美日韩一区二区三区不卡视频| 中文字幕av一区二区三区人| 亚洲精品123区| 红桃视频国产精品| 午夜免费一区| 悠悠资源网久久精品| 精品一区在线| 伊人久久亚洲影院| 99re国产精品| 欧美日韩在线二区| 亚洲欧洲国产精品一区| 免费日韩视频| 精品1区2区3区4区| 亚洲一区国产| 先锋亚洲精品| 免费日韩视频| 亚洲色图国产| 婷婷亚洲精品| 国产欧美日韩一级| 国产高清精品二区| 国精品产品一区| 水蜜桃久久夜色精品一区| 日韩综合在线| 亚洲日本网址| 午夜久久久久| 亚洲综合丁香| 蜜臀av国产精品久久久久 | 婷婷综合五月| 麻豆91精品| 日韩中文av| 国产精品红桃| 正在播放日韩精品| 亚洲视频综合| 亚洲午夜久久| 国产精品一区毛片| 日韩精品dvd| 亚洲综合欧美| 亚洲日本国产| 国产精品尤物| 特黄毛片在线观看| 亚洲精品99| 日韩和欧美一区二区三区| 国产精品一区亚洲| 中文字幕成在线观看| 蜜桃国内精品久久久久软件9| 亚洲深深色噜噜狠狠爱网站| 国产探花一区| 日韩在线短视频| 在线观看视频免费一区二区三区| 国产精品一二| 久久精品在线| 亚洲精品亚洲人成在线观看| 国产一精品一av一免费爽爽| 国产一区二区三区日韩精品 | 久久精品伊人| 欧美va天堂在线| 日韩三级精品| 国产精品成人a在线观看| 最新日韩av| 国产精品亚洲二区| 欧美高清不卡| 91精品国产自产观看在线| av免费不卡国产观看| 99在线|亚洲一区二区| 日韩av中文字幕一区二区| 岛国av在线网站| 亚洲午夜免费| 国产白浆在线免费观看| 蜜臀av亚洲一区中文字幕| 久草精品视频| 蜜桃av一区| 成人在线黄色| 蜜桃av一区二区在线观看| 精品久久久中文字幕| 99在线|亚洲一区二区| 国产精品66| 老牛国产精品一区的观看方式| 久久精品一区二区三区中文字幕| 亚洲精品成人| 麻豆一区二区在线| 99pao成人国产永久免费视频| 国产日韩欧美三区| 影院欧美亚洲| av日韩中文| 欧美日韩一区二区高清| 欧美69视频| 国产一区精品福利| 日本一区二区三区视频在线看 | 在线成人动漫av| 国产精品a久久久久| 日韩在线观看一区二区|