gpt4 book ai didi

python - QScrollArea 正在扩展而不是滚动

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:37 25 4
gpt4 key购买 nike

我有一个QScrollArea,我将向其中添加一些其他小部件。我想要的是,当其中的小部件扩展其大小时,QScrollArea 开始滚动。

但是滚动区域开始自行扩展。

这是我使用的代码:

import sys
from PyQt4 import QtGui, QtCore

class Widget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.vbox = QtGui.QVBoxLayout()
self.setLayout(self.vbox)

def add_button(self):
tmp = QtGui.QPushButton("...", self)
self.vbox.addWidget(tmp)

class ScrollArea(QtGui.QScrollArea):
def __init__(self, parent=None):
QtGui.QScrollArea.__init__(self, parent)

self.vbox = QtGui.QVBoxLayout()

self.w = Widget(self)
self.setWidget(self.w) #set the widget to provide scrolling for here
self.vbox.addWidget(self.w)

self.plus = QtGui.QPushButton("button", self)
self.connect(self.plus, QtCore.SIGNAL("clicked()"), self.add_button)
self.vbox.addWidget(self.plus)

self.setLayout(self.vbox)

def add_button(self):
self.w.add_button()

app = QtGui.QApplication(sys.argv)
main = ScrollArea()
main.show()
sys.exit(app.exec_())

我还尝试在类 ScrollArea 中而不是在其自己的类中设置子窗口小部件 self.w 的布局,但它具有相同的效果。

最佳答案

正如 Bakuriu 已经指出的那样,重要的是不要将自己的布局应用于 QScrollArea 而只是指定一个小部件(在下面用 w 表示) )通过 setWidget 作为滚动区域应注意的部分。

在调用 setWidget 之前设置 w 的布局非常重要,如果您想向 添加其他几个子项, w (就像上面问题中的 QPushButton),为 w 的布局调用 setSizeConstraint 也很重要(例如setSizeContraint(QLayout.SetMinAndMaxSize),请参阅 this 了解更多选项)。关注 this link有关 QScrollArea 行为的更多详细信息。

以下代码是一个工作示例:

import sys
from PyQt4 import QtGui, QtCore

class Widget(QtGui.QWidget):
""" Here we add more buttons, if the size of the buttons exceeds the size of the widget scrolling starts. """
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.vbox = QtGui.QVBoxLayout()
self.vbox.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize)
self.setLayout(self.vbox)

def add_button(self):
tmp = QtGui.QPushButton("...", self)
self.vbox.addWidget(tmp)

class ScrollArea(QtGui.QScrollArea):
""" This scroll area only handles one widget for which scrolling should be provided. """
def __init__(self, parent=None):
QtGui.QScrollArea.__init__(self, parent)

self.w = Widget()
self.setWidget(self.w) #set the widget to provide scrolling for here

def add_button(self):
self.w.add_button()

class MainWindow(QtGui.QWidget):
""" Use this widget to arrange the QScrollArea and the QPushButton. """
def __init__(self, parent=None):
QtGui.QWidget.__init__(self)

self.vbox = QtGui.QVBoxLayout()
self.scroll = ScrollArea(self)
self.vbox.addWidget(self.scroll)

self.plus = QtGui.QPushButton("button", self)
self.connect(self.plus, QtCore.SIGNAL("clicked()"), self.add_button)
self.vbox.addWidget(self.plus)

self.setLayout(self.vbox)

def add_button(self):
self.scroll.add_button()

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

关于python - QScrollArea 正在扩展而不是滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610864/

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