Python pyqt中的滚动区域有问题吗?

Python pyqt中的滚动区域有问题吗?,python,qt4,pyqt,Python,Qt4,Pyqt,这是我使用qt设计器生成的文件 from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: _fromUtf8 = lambda s: s class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName(_fromUtf8("Dialog")

这是我使用qt设计器生成的文件

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(1024, 600)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
        Dialog.setSizePolicy(sizePolicy)
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.gridLayout = QtGui.QGridLayout(Dialog)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.graphicsView = QtGui.QGraphicsView(Dialog)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.graphicsView.sizePolicy().hasHeightForWidth())
        self.graphicsView.setSizePolicy(sizePolicy)
        self.graphicsView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.graphicsView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.graphicsView.setObjectName(_fromUtf8("graphicsView"))
        self.verticalLayout.addWidget(self.graphicsView)
        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 4)
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setText(QtGui.QApplication.translate("Dialog", "Add", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.verticalLayout_2.addWidget(self.pushButton)
        self.gridLayout.addLayout(self.verticalLayout_2, 1, 0, 1, 1)
        self.verticalLayout_4 = QtGui.QVBoxLayout()
        self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))
        self.pushButton_2 = QtGui.QPushButton(Dialog)
        self.pushButton_2.setText(QtGui.QApplication.translate("Dialog", "Delete", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.verticalLayout_4.addWidget(self.pushButton_2)
        self.gridLayout.addLayout(self.verticalLayout_4, 1, 1, 1, 1)
        self.verticalLayout_5 = QtGui.QVBoxLayout()
        self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5"))
        self.pushButton_3 = QtGui.QPushButton(Dialog)
        self.pushButton_3.setText(QtGui.QApplication.translate("Dialog", "Edit", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
        self.verticalLayout_5.addWidget(self.pushButton_3)
        self.gridLayout.addLayout(self.verticalLayout_5, 1, 2, 1, 1)
        self.verticalLayout_3 = QtGui.QVBoxLayout()
        self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
        self.label = QtGui.QLabel(Dialog)
        self.label.setText(QtGui.QApplication.translate("Dialog", "Connected", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setObjectName(_fromUtf8("label"))
        self.verticalLayout_3.addWidget(self.label)
        self.gridLayout.addLayout(self.verticalLayout_3, 1, 3, 1, 1)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.tableWidget = QtGui.QTableWidget(Dialog)
        self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)
        self.horizontalLayout.addWidget(self.tableWidget)
        self.gridLayout.addLayout(self.horizontalLayout, 2, 0, 1, 3)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
        self.tabWidget = QtGui.QTabWidget(Dialog)
        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
        self.tab = QtGui.QWidget()
        self.tab.setObjectName(_fromUtf8("tab"))
        self.verticalLayout_6 = QtGui.QVBoxLayout(self.tab)
        self.verticalLayout_6.setObjectName(_fromUtf8("verticalLayout_6"))
        self.scrollArea = QtGui.QScrollArea(self.tab)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName(_fromUtf8("scrollArea"))
        self.scrollAreaWidgetContents = QtGui.QWidget(self.scrollArea)
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 701, 292))
        self.scrollAreaWidgetContents.setObjectName(_fromUtf8("scrollAreaWidgetContents"))
        self.verticalLayout_7 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
        self.verticalLayout_7.setObjectName(_fromUtf8("verticalLayout_7"))
        self.dockWidget = QtGui.QDockWidget(self.scrollAreaWidgetContents)
        self.dockWidget.setObjectName(_fromUtf8("dockWidget"))
        self.dockWidgetContents = QtGui.QWidget()
        self.dockWidgetContents.setObjectName(_fromUtf8("dockWidgetContents"))
        self.verticalLayout_8 = QtGui.QVBoxLayout(self.dockWidgetContents)
        self.verticalLayout_8.setObjectName(_fromUtf8("verticalLayout_8"))
        self.plainTextEdit = QtGui.QPlainTextEdit(self.dockWidgetContents)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.plainTextEdit.sizePolicy().hasHeightForWidth())
        self.plainTextEdit.setSizePolicy(sizePolicy)
        self.plainTextEdit.setObjectName(_fromUtf8("plainTextEdit"))
        self.verticalLayout_8.addWidget(self.plainTextEdit)
        self.dockWidget.setWidget(self.dockWidgetContents)
        self.verticalLayout_7.addWidget(self.dockWidget)


        self.dockWidget_2 = QtGui.QDockWidget(self.scrollAreaWidgetContents)
        self.dockWidget_2.setObjectName(_fromUtf8("dockWidget_2"))
        self.dockWidgetContents_2 = QtGui.QWidget()
        self.dockWidgetContents_2.setObjectName(_fromUtf8("dockWidgetContents_2"))
        self.verticalLayout_9 = QtGui.QVBoxLayout(self.dockWidgetContents_2)
        self.verticalLayout_9.setObjectName(_fromUtf8("verticalLayout_9"))
        self.plainTextEdit_2 = QtGui.QPlainTextEdit(self.dockWidgetContents_2)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.plainTextEdit_2.sizePolicy().hasHeightForWidth())
        self.plainTextEdit_2.setSizePolicy(sizePolicy)
        self.plainTextEdit_2.setObjectName(_fromUtf8("plainTextEdit_2"))
        self.verticalLayout_9.addWidget(self.plainTextEdit_2)
        self.dockWidget_2.setWidget(self.dockWidgetContents_2)
        self.verticalLayout_7.addWidget(self.dockWidget_2)


    self.dockWidget_3 = QtGui.QDockWidget(self.scrollAreaWidgetContents)
        self.dockWidget_3.setObjectName(_fromUtf8("dockWidget_3"))
        self.dockWidgetContents_3 = QtGui.QWidget()
        self.dockWidgetContents_3.setObjectName(_fromUtf8("dockWidgetContents_3"))
        self.verticalLayout_10 = QtGui.QVBoxLayout(self.dockWidgetContents_3)
        self.verticalLayout_10.setObjectName(_fromUtf8("verticalLayout_10"))
        self.plainTextEdit_3 = QtGui.QPlainTextEdit(self.dockWidgetContents_3)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.plainTextEdit_3.sizePolicy().hasHeightForWidth())
        self.plainTextEdit_3.setSizePolicy(sizePolicy)
        self.plainTextEdit_3.setObjectName(_fromUtf8("plainTextEdit_3"))
        self.verticalLayout_10.addWidget(self.plainTextEdit_3)
        self.dockWidget_3.setWidget(self.dockWidgetContents_3)
        self.verticalLayout_7.addWidget(self.dockWidget_3)    

        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.verticalLayout_6.addWidget(self.scrollArea)
        self.tabWidget.addTab(self.tab, _fromUtf8(""))
        self.tab_2 = QtGui.QWidget()
        self.tab_2.setObjectName(_fromUtf8("tab_2"))
        self.tabWidget.addTab(self.tab_2, _fromUtf8(""))
        self.horizontalLayout_2.addWidget(self.tabWidget)
        self.gridLayout.addLayout(self.horizontalLayout_2, 2, 3, 1, 1)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QtGui.QApplication.translate("Dialog", "Tab 1", None, QtGui.QApplication.UnicodeUTF8))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QtGui.QApplication.translate("Dialog", "Tab 2", 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_())
输出在屏幕截图中:问题是Tab1没有显示任何滚动条,即使我在scrollArea下设置了布局。我期望滚动条出现的区域显示为红色矩形。
我记得这个类似的问题:-)

您仍然无法获得正确的滚动条的原因是,您在滚动区域内的小部件没有最小高度,并且被允许向下收缩足够远,以至于它们永远不会强制滚动区域显示其滚动条

在代码中,您可以通过以下方式解决此问题:

self.dockWidgetContents.setMinimumHeight(100)

尽管如此,您不应该对Qt Designer生成的文件进行任何直接编辑。您应该做的是进入QtDesigner,选择小部件,并在其属性列表的顶部为它们设置最小高度。

我记得这个类似的问题:-)

您仍然无法获得正确的滚动条的原因是,您在滚动区域内的小部件没有最小高度,并且被允许向下收缩足够远,以至于它们永远不会强制滚动区域显示其滚动条

在代码中,您可以通过以下方式解决此问题:

self.dockWidgetContents.setMinimumHeight(100)

尽管如此,您不应该对Qt Designer生成的文件进行任何直接编辑。你要做的是进入QtDesigner,选择小部件,然后在它们的属性列表顶部为它们设置一个最小高度。

这个人工作得非常好。但还有一个问题。由于某种原因,我不得不更改对话框的内容。我没有使用dockWidget,而是使用了groupBox,在这种情况下,设置最小高度不起作用。你能解释一下为什么吗?或者你想让我把全部代码都贴出来。感谢您的帮助这里可以找到代码的一小部分这段代码中没有足够的上下文让我确切知道,但是,QGroupBox是QWidget的一个子类,与dockWidget或其他任何东西一样。固定高度是QWidget属性。所以它的功能应该是一样的。如果不是这样,那么子窗口小部件和它们所在的布局就会出现问题。完整的代码发布在[此处]()。我感谢你的帮助。感谢您的时间。1)您的原始UI文件将更容易,因为此转换文件包含大量额外的设计器垃圾。2) 停止将所有内容设置为忽略大小策略。您有布局问题,因为您不让布局完成它们的工作。就让这些东西成为首选吧。您的分组框似乎刚好达到其最小大小,滚动条出现。这些小的重叠工件可能来自于各种widget.man的混合大小和布局设置,它们工作得非常好。但还有一个问题。由于某种原因,我不得不更改对话框的内容。我没有使用dockWidget,而是使用了groupBox,在这种情况下,设置最小高度不起作用。你能解释一下为什么吗?或者你想让我把全部代码都贴出来。感谢您的帮助这里可以找到代码的一小部分这段代码中没有足够的上下文让我确切知道,但是,QGroupBox是QWidget的一个子类,与dockWidget或其他任何东西一样。固定高度是QWidget属性。所以它的功能应该是一样的。如果不是这样,那么子窗口小部件和它们所在的布局就会出现问题。完整的代码发布在[此处]()。我感谢你的帮助。感谢您的时间。1)您的原始UI文件将更容易,因为此转换文件包含大量额外的设计器垃圾。2) 停止将所有内容设置为忽略大小策略。您有布局问题,因为您不让布局完成它们的工作。就让这些东西成为首选吧。您的分组框似乎刚好达到其最小大小,滚动条出现。小重叠工件可能来自各种小部件的混合大小和布局设置。