考虑下面的例子,
import sys
from PyQt5 import QtCore, QtWidgets
class scrolldemo(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(scrolldemo, self).__init__(parent)
widget = QtWidgets.QWidget()
widget.setFixedSize(QtCore.QSize(500, 600))
scroll = QtWidgets.QScrollArea()
scroll.setWidget(widget)
self.setCentralWidget(scroll)
self.setWindowTitle("Scroll demo")
def main():
app = QtWidgets.QApplication(sys.argv)
ex = scrolldemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
该小部件的垂直尺寸稍大,这会添加垂直滚动条。但是,垂直滚动条占用的空间与小部件本身占用的空间相同。这也需要一个水平滚动条,使窗口看起来像这样:
我对垂直滚动条没意见,但水平滚动条很笨拙。请注意,水平滚动条所需的额外空间恰好是垂直滚动条的宽度。
这可以通过覆盖该sizeHint方法以包含垂直滚动条的宽度来解决,
class ScrollAreaWithVerticalBar(QtWidgets.QScrollArea):
def sizeHint(self):
hint = super().sizeHint()
bar_width = self.verticalScrollBar().sizeHint().width()
return QtCore.QSize(hint.width() + bar_width, hint.height())
Run Code Online (Sandbox Code Playgroud)
这会产生一个稍宽的 QScrollArea,不再需要笨拙的水平滚动条。我通过查看与此问题相关的已关闭的 Qt 错误报告得到了这个想法。然而,该错误报告被关闭为“超出范围”,这让我认为这根本不是一个错误,我错误地使用了 QScrollArea,而且我的错误使用也需要解决方法。
那么我应该做什么呢?
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |