gpt4 book ai didi

python - 使滚动区域水平扩展以适应内容

转载 作者:太空狗 更新时间:2023-10-30 03:01:24 26 4
gpt4 key购买 nike

我想让这个对话框水平展开以显示所有图像。我不希望它垂直展开,因为会有一个滚动条。注释掉的 sizePolicy 内容没有帮助。这些图像只有四张并排放置时比窗口宽的图片。

我做错了什么?

from PyQt4 import QtGui, QtCore

class Images(QtGui.QDialog):
def __init__(self, pics, size, imagesPerRow=6, imagePopup=True, parent=None):
QtGui.QDialog.__init__(self)
self.scrollArea = QtGui.QScrollArea(self)
self.scrollArea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
#sp = QtGui.QSizePolicy()
#sp.setHorizontalPolicy(QtGui.QSizePolicy.Expanding)
#self.setSizePolicy(sp)
#self.scrollAreaWidgetContents.setSizePolicy(sp)
#self.scrollArea.setSizePolicy(sp)

self.verticalLayout = QtGui.QVBoxLayout(self)
self.verticalLayout.addWidget(self.scrollArea)

self.gLayoutScroll = QtGui.QGridLayout(self.scrollAreaWidgetContents)

row = col = 0
for pic in pics:
thumb = QtGui.QLabel()
pixmap = QtGui.QPixmap(pic)
pixmap = pixmap.scaled(size, QtCore.Qt.KeepAspectRatioByExpanding, QtCore.Qt.SmoothTransformation)
thumb.setPixmap(pixmap)
self.gLayoutScroll.addWidget(thumb, row, col)

col +=1
if col % imagesPerRow == 0:
row += 1
col = 0

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
app.setApplicationName('myDialog')

main = Images(['one.png','two.png','three.png','four.png'], size=QtCore.QSize(192,192))
main.show()

sys.exit(app.exec_())

最佳答案

您可以将滚动区域的最小宽度设置为内容的宽度。这样,滚动区域最初将显示内容小部件的完整水平宽度。

这是我的示例(PySide、Python 3):

from PySide import QtGui, QtCore

class Images(QtGui.QScrollArea):
def __init__(self, images):
super().__init__()

self.content = QtGui.QWidget()
self.layout = QtGui.QGridLayout(self.content)
self.layout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
col = 0
for image in images:
thumb = QtGui.QLabel()
thumb.setPixmap(QtGui.QPixmap(image))
self.layout.addWidget(thumb, 0, col)
col += 1

self.setWidget(self.content)
self.setMinimumWidth(self.content.sizeHint().width())
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

app = QtGui.QApplication([])

window = QtGui.QWidget()
layout = QtGui.QVBoxLayout(window)
scroll_area = Images(['test.png','test.png','test.png','test.png'])
layout.addWidget(scroll_area)
window.show()

app.exec_()

添加图像后,将滚动条的最小宽度设置为内容的首选宽度。我还关闭了水平滚动条,因为这样就不需要它了。

结果是一个水平方向足够大但垂直方向不一定足够大的窗口(手动调整大小)。

expanded scroll area

两条评论:

  • 如果内容改变了宽度,你必须重新做一次。
  • 垂直滚动条将在内容小部件内部(重叠)。如果您不希望将垂直滚动条的宽度添加到滚动区域的最小宽度。

关于python - 使滚动区域水平扩展以适应内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com