1 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于許多問(wèn)題都想知道如何使用許多小部件都有的 QScrollArea,因此我將詳細(xì)解釋各種形式,并將它們用作未來(lái)讀者的規(guī)范答案。
QScrollArea 只允許放置容器小部件,因此其他小部件必須放置為容器小部件的子級(jí)。
要將小部件放置為另一個(gè)小部件的子部件,有兩種可能性:
1.使用QLayout:
QLayouts 允許您根據(jù) QSizePolicy、strecth、sizeHint 等自動(dòng)調(diào)整小部件的幾何形狀。因此,在這種情況下很簡(jiǎn)單:只需將 widgetResizing 屬性設(shè)置為 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、直接設(shè)置widgets,無(wú)需布局:
在這種情況下,您必須計(jì)算包含內(nèi)部小部件的最小幾何形狀并設(shè)置容器中的大小,還必須將 widgetResizing 屬性設(shè)置為 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_())
添加回答
舉報(bào)