我想在dockwidget内部添加一个滚动条并让它适合wnd大小,而dockwidget似乎重新停靠不起作用。
import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
class My_wgt(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = QVBoxLayout()
lineedit_list = [QLabel(f"Line {i}") for i in range(30)]
for i in range(30):
layout.addWidget(lineedit_list[i])
self.setLayout(layout)
class My_wnd(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedHeight(500)
self.dock = QDockWidget("Dock")
self.dock.setFloating(False)
self.dock_in_wgt = My_wgt(self.dock)
self.dock_in_wgt.setFixedWidth(250)
self.dock.setWidget(self.dock_in_wgt)
self.dock.setAllowedAreas(Qt.RightDockWidgetArea)
self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = My_wnd()
main_window.show()
sys.exit(app.exec())
如果您想向 DockWidget 添加滚动条并使其适合窗口大小,您应该将 QVBoxLayout 放入 QScrollArea 中,而不是直接将其放置到小部件上。
import sys
from PySide6.QtWidgets import *
from PySide6.QtCore import *
class My_wgt(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = QVBoxLayout(self)
scroll_area = QScrollArea(self)
container = QWidget()
container_layout = QVBoxLayout()
lineedit_list = [QLabel(f"Line {i}") for i in range(30)]
for label in lineedit_list:
container_layout.addWidget(label)
container.setLayout(container_layout)
scroll_area.setWidget(container)
scroll_area.setWidgetResizable(True)
layout.addWidget(scroll_area)
class My_wnd(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedHeight(500)
self.dock = QDockWidget("Dock", self)
self.dock.setFloating(False)
self.dock_in_wgt = My_wgt(self.dock)
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(1)
self.dock_in_wgt.setSizePolicy(sizePolicy)
self.dock.setWidget(self.dock_in_wgt)
self.dock.setAllowedAreas(Qt.RightDockWidgetArea)
self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = My_wnd()
main_window.show()
sys.exit(app.exec())