如何在PyQt的qdockwidget中添加滚动条?
我想在dockwidget里面加一个滚动条,并且让它适应窗口的大小,但这个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())
这是我用pyside6写的代码,希望有人能帮帮我。
这是我想添加的内容1 个回答
0
如果你想给你的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())