亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用QScrollArea讓滾動條出現

如何使用QScrollArea讓滾動條出現

弒天下 2023-07-18 14:58:02
我正在嘗試使用 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_())它應該是這樣的:它看起來是這樣的:
查看完整描述

1 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

由于許多問題都想知道如何使用許多小部件都有的 QScrollArea,因此我將詳細解釋各種形式,并將它們用作未來讀者的規范答案。


QScrollArea 只允許放置容器小部件,因此其他小部件必須放置為容器小部件的子級。


要將小部件放置為另一個小部件的子部件,有兩種可能性:


1.使用QLayout:

QLayouts 允許您根據 QSizePolicy、strecth、sizeHint 等自動調整小部件的幾何形狀。因此,在這種情況下很簡單:只需將 widgetResizing 屬性設置為 True。


import sys

from PyQt5 import QtWidgets



class 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 sys

from PyQt5 import QtCore, QtWidgets



class 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_())


查看完整回答
反對 回復 2023-07-18
  • 1 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號