这是一个反复出现的问题,我读过很多主题,有些有帮助(python Qt: main widget scroll bar,PyQt: Put scrollbars in this),有些根本没有帮助(PyQt adding a scrollbar to my main window),我仍然对滚动条有问题。它们是不可用的,灰色的。
这是我的代码(我正在使用PyQt5):
def setupUi(self, Interface):
Interface.setObjectName("Interface")
Interface.resize(1152, 1009)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Interface.sizePolicy().hasHeightForWidth())
Interface.setSizePolicy(sizePolicy)
Interface.setMouseTracking(False)
icon = QtGui.QIcon()
self.centralWidget = QtWidgets.QWidget(Interface)
self.centralWidget.setObjectName("centralWidget")
self.scrollArea = QtWidgets.QScrollArea(self.centralWidget)
self.scrollArea.setGeometry(QtCore.QRect(0, 0, 1131, 951))
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollArea.setEnabled(True)
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 1112, 932))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.scrollAreaWidgetContents)
self.horizontalLayout.setObjectName("horizontalLayout")
所以我想把滚动条放在主窗口小部件上,所以如果用户调整主窗口的大小,滚动条就会出现,让他上下移动,看到小窗口小部件之外的子窗口小部件,允许它左右移动。
感谢帮助!
示例代码有几处错误。主要问题是您没有正确使用布局,并且没有将内容小部件添加到滚动区域。
下面是一个固定版本(注释行都是垃圾,可以删除):
滚动条将变灰,因为您通过将滚动条策略设置为
Qt.ScrollBarAlwaysOn
使其始终可见,但实际上没有要滚动的内容,因此它们被禁用。如果希望滚动条仅在需要时出现,则需要使用Qt.ScrollBarAsNeeded
。没有要滚动的内容,因为
QHBoxLayout
中只有一个小部件(请参见self.scrollAreaWidgetContents
)。另外,如果此方法是从QMainWindow
执行的,则在设置中心小部件时也会出错:self.centralWidget
是检索中心小部件的方法。它之所以起作用是因为您正在用QWidget
实例覆盖它(我相信python允许您这样做)。要正确设置中心小部件,需要在QMainWindow
中使用setCentralWidget()
。我把
Interface
留下了,因为我不知道它是什么,但是其他的应该没问题。相关问题 更多 >
编程相关推荐