如何使用QScrollArea让滚动条出现

我正在尝试使用 pyqt5 创建一个具有垂直布局的滚动区域,并且我放入了一些标签。我知道即使它是垂直布局,如果文本不适合,它也应该水平滚动。但无论我尝试什么,它都不让我滚动。


这是我正在使用的代码:


class window(QMainWindow):

    def __init__(self):

        super(window, self).__init__()

        self.setGeometry(300, 300, 803, 520)

        self.init_ui()


    def init_ui(self):

        self.teacher_box = QScrollArea(self)

        self.teacher_box.setGeometry(360, 10, 420, 181)

        self.teacher_box.setWidgetResizable(True)

        self.teacher_box.setObjectName("teacher_box")

        self.teacher_box_widget = QWidget()

        self.teacher_box_widget.setGeometry(QtCore.QRect(0, 0, 420, 181))

        self.teacher_box_widget.setObjectName("teacher_box_widget")

        self.verticalLayout = QVBoxLayout(self.teacher_box_widget)

        self.verticalLayout.setObjectName("verticalLayout")

        self.teacher_box.setWidget(self.teacher_box_widget) 

        self.teacher_label = QtWidgets.QLabel(self.teacher_box_widget)

        self.teacher_label.setText("This is a new text label that i created using pyqt5's qscrollarea and now the label is going to get outside the boundaries")

        self.teacher_label.adjustSize()

        self.teacher_label.move(10, 10)



if __name__ == "__main__":

    app = QApplication(sys.argv)

    win = window()

    win.show()

    sys.exit(app.exec_())

它应该是这样的:

http://img3.mukewang.com/64b6381900015bdf03220222.jpg

它看起来是这样的:

http://img3.mukewang.com/64b638240001768b04250164.jpg


弑天下
浏览 117回答 1
1回答

汪汪一只猫

由于许多问题都想知道如何使用许多小部件都有的 QScrollArea,因此我将详细解释各种形式,并将它们用作未来读者的规范答案。QScrollArea 只允许放置容器小部件,因此其他小部件必须放置为容器小部件的子级。要将小部件放置为另一个小部件的子部件,有两种可能性:1.使用QLayout:QLayouts 允许您根据 QSizePolicy、strecth、sizeHint 等自动调整小部件的几何形状。因此,在这种情况下很简单:只需将 widgetResizing 属性设置为 True。import sysfrom PyQt5 import QtWidgetsclass Window(QtWidgets.QMainWindow):    def __init__(self, parent=None):        super(Window, self).__init__(parent)        central_widget = QtWidgets.QWidget()        self.setCentralWidget(central_widget)        scroll_area = QtWidgets.QScrollArea(central_widget)        scroll_area.setGeometry(360, 10, 420, 180)        scroll_area.setWidgetResizable(True)        container = QtWidgets.QWidget()        scroll_area.setWidget(container)        # Set widgets via layout        lay = QtWidgets.QVBoxLayout(container)        lay.setContentsMargins(10, 10, 0, 0)        for letter in "ABCDE":            text = letter * 100            label = QtWidgets.QLabel(text)            lay.addWidget(label)        lay.addStretch()        self.setGeometry(300, 300, 803, 520)if __name__ == "__main__":    app = QtWidgets.QApplication(sys.argv)    win = Window()    win.show()    sys.exit(app.exec_())2、直接设置widgets,无需布局:在这种情况下,您必须计算包含内部小部件的最小几何形状并设置容器中的大小,还必须将 widgetResizing 属性设置为 False:import sysfrom PyQt5 import QtCore, QtWidgetsclass Window(QtWidgets.QMainWindow):    def __init__(self, parent=None):        super(Window, self).__init__(parent)        central_widget = QtWidgets.QWidget()        self.setCentralWidget(central_widget)        scroll_area = QtWidgets.QScrollArea(central_widget)        scroll_area.setGeometry(360, 10, 420, 180)        scroll_area.setWidgetResizable(False)        container = QtWidgets.QWidget()        scroll_area.setWidget(container)        # calculate geometry        geometry = QtCore.QRect(10, 10, 0, 0)        for letter in "ABCDE":            text = letter * 100            label = QtWidgets.QLabel(text, container)            label.adjustSize()            label.move(geometry.bottomLeft())            geometry |= label.geometry()        geometry.setTopLeft(QtCore.QPoint(0, 0))        container.resize(geometry.size())        self.setGeometry(300, 300, 803, 520)if __name__ == "__main__":    app = QtWidgets.QApplication(sys.argv)    win = Window()    win.show()    sys.exit(app.exec_())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python