Python 如何将水平滚动条与多个groupbox关联。?

Python 如何将水平滚动条与多个groupbox关联。?,python,qt4,pyqt,pyqt4,Python,Qt4,Pyqt,Pyqt4,我想在对话框中总共有8个groupbox。我不知道如何关联水平滚动条,以便向下滚动并访问所有组框。在下面的代码中,我仅添加了2作为示例。感谢您的帮助 class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.buttonBox = QtGui.QDialogButtonBox(

我想在对话框中总共有8个groupbox。我不知道如何关联水平滚动条,以便向下滚动并访问所有组框。在下面的代码中,我仅添加了2作为示例。感谢您的帮助

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.buttonBox = QtGui.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(300, 20, 81, 71))
        self.buttonBox.setOrientation(QtCore.Qt.Vertical)
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.scrollArea = QtGui.QScrollArea(Dialog)
        self.scrollArea.setGeometry(QtCore.QRect(30, 20, 251, 251))
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 249, 249))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.groupBox = QtGui.QGroupBox(self.scrollAreaWidgetContents)
        self.groupBox.setGeometry(QtCore.QRect(10, 10, 211, 81))
        self.groupBox.setObjectName("groupBox")
        self.textEdit = QtGui.QTextEdit(self.groupBox)
        self.textEdit.setGeometry(QtCore.QRect(10, 20, 171, 51))
        self.textEdit.setObjectName("textEdit")
        self.groupBox_2 = QtGui.QGroupBox(self.scrollAreaWidgetContents)
        self.groupBox_2.setGeometry(QtCore.QRect(10, 110, 211, 111))
        self.groupBox_2.setObjectName("groupBox_2")
        self.textEdit_2 = QtGui.QTextEdit(self.groupBox_2)
        self.textEdit_2.setGeometry(QtCore.QRect(10, 20, 171, 84))
        self.textEdit_2.setObjectName("textEdit_2")
        self.verticalScrollBar = QtGui.QScrollBar(self.scrollAreaWidgetContents)
        self.verticalScrollBar.setGeometry(QtCore.QRect(230, 0, 16, 241))
        self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
        self.verticalScrollBar.setObjectName("verticalScrollBar")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.retranslateUi(Dialog)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.groupBox.setTitle(QtGui.QApplication.translate("Dialog", "GroupBox", None, QtGui.QApplication.UnicodeUTF8))
        self.groupBox_2.setTitle(QtGui.QApplication.translate("Dialog", "GroupBox", None, QtGui.QApplication.UnicodeUTF8))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

正如我在评论中所说,
QScrollArea
不需要手动
QScrollBar
。它将在需要时创建。如果没有看到“不工作”代码,我无法确定您的问题是什么,但我猜是固定大小的项目及其位置。您可能将内容放在小部件的边距之外,或者相互重叠,以便内部小部件不能适当增长

无论如何,这里有一个复制对话框的最小示例(请注意滚动条):

导入系统 从PyQt4导入QtGui、QtCore 类MyDialog(QtGui.QDialog): def uuu init uuu(self,parent=None): 超级(MyDialog,self)。\uuuuu初始化\uuuuuu(父级) scrolllayout=QtGui.QVBoxLayout() scrollwidget=QtGui.QWidget() scrollwidget.setLayout(scrolllayout) scroll=QtGui.QScrollArea() scroll.setWidgetResizeable(True)#设置为使用滚动区域调整内部小部件的大小 scroll.setWidget(scrollwidget) self.groupbox=[]#保留对groupbox的引用供以后使用 对于范围(8)中的i:#8个包含文本编辑的分组框 groupbox=QtGui.QGroupBox(“%d”%i) grouplayout=QtGui.QHBoxLayout() grouptext=QtGui.QTextEdit() grouplayout.addWidget(grouptext) groupbox.setLayout(grouplayout) scrolllayout.addWidget(groupbox) self.groupbox.append(groupbox) self.buttonbox=QtGui.QDialogButtonBox() self.buttonbox.setOrientation(QtCore.Qt.Vertical) self.buttonbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok) layout=QtGui.QHBoxLayout() layout.addWidget(滚动) layout.addWidget(self.buttonbox) self.setLayout(布局) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QtGui.QApplication(sys.argv) dialog=MyDialog() dialog.show() sys.exit(app.exec_())

正如我在评论中所说,
QScrollArea
不需要手动
QScrollBar
。它将在需要时创建。如果没有看到“不工作”代码,我无法确定您的问题是什么,但我猜是固定大小的项目及其位置。您可能将内容放在小部件的边距之外,或者相互重叠,以便内部小部件不能适当增长

无论如何,这里有一个复制对话框的最小示例(请注意滚动条):

导入系统 从PyQt4导入QtGui、QtCore 类MyDialog(QtGui.QDialog): def uuu init uuu(self,parent=None): 超级(MyDialog,self)。\uuuuu初始化\uuuuuu(父级) scrolllayout=QtGui.QVBoxLayout() scrollwidget=QtGui.QWidget() scrollwidget.setLayout(scrolllayout) scroll=QtGui.QScrollArea() scroll.setWidgetResizeable(True)#设置为使用滚动区域调整内部小部件的大小 scroll.setWidget(scrollwidget) self.groupbox=[]#保留对groupbox的引用供以后使用 对于范围(8)中的i:#8个包含文本编辑的分组框 groupbox=QtGui.QGroupBox(“%d”%i) grouplayout=QtGui.QHBoxLayout() grouptext=QtGui.QTextEdit() grouplayout.addWidget(grouptext) groupbox.setLayout(grouplayout) scrolllayout.addWidget(groupbox) self.groupbox.append(groupbox) self.buttonbox=QtGui.QDialogButtonBox() self.buttonbox.setOrientation(QtCore.Qt.Vertical) self.buttonbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok) layout=QtGui.QHBoxLayout() layout.addWidget(滚动) layout.addWidget(self.buttonbox) self.setLayout(布局) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QtGui.QApplication(sys.argv) dialog=MyDialog() dialog.show() sys.exit(app.exec_())

通常情况下,
QScrollArea
会在物品超过可见大小时自动显示滚动条。您不需要手动创建
QScrollBar
。你为什么要自己创建一个呢?哦,还有,你是在用固定大小手动放置东西。你为什么不使用布局管理器?@Avaris:这两点都不错。这几乎就是答案。使用ScrollArea附带的滚动条,并使用布局:-)@Avaris我已经尝试在ScrollArea下添加更多的GroupBox,但它没有自动展开,正如您所提到的。如果可能的话,你能提供任何代码吗?@Jack:我想问题出在固定大小的
scrollWidgetContents
上。我会写一个答案。通常情况下,
QScrollArea
会在事物变得大于可见大小时自动显示滚动条。您不需要手动创建
QScrollBar
。你为什么要自己创建一个呢?哦,还有,你是在用固定大小手动放置东西。你为什么不使用布局管理器?@Avaris:这两点都不错。这几乎就是答案。使用ScrollArea附带的滚动条,并使用布局:-)@Avaris我已经尝试在ScrollArea下添加更多的GroupBox,但它没有自动展开,正如您所提到的。如果可能的话,你能提供任何代码吗?@Jack:我想问题出在固定大小的
scrollWidgetContents
上。我会写一个答案的。非常感谢阿瓦里斯。我也面临同样的问题。这个解决方案帮助很大。非常感谢Avaris。我也面临同样的问题。这个解决方案帮助很大。