我希望距离与绘制棍子的地方的十字位置相同。
当我添加第一个小部件时,它出现在最顶部,正如您在屏幕截图中看到的那样,但是当我添加第二个小部件时,它出现在中间,其中显示大约 4-5 个小部件。
我希望它们在第一个之后立即添加,也就是说,它们没有很大的距离。
from PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QLabel, QVBoxLayout, QHBoxLayout, QFrame, QScrollArea, QSpacerItem, QSizePolicy
import sys
from style import StyleSheet
class SubWidget(QFrame):
def __init__(self, label_text, button_text, parent_layout) -> None:
super().__init__()
self.setObjectName("sub_widget")
self.parent_layout = parent_layout
self.setFixedSize(320, 45)
self.label = QLabel(label_text)
self.button_delete = QPushButton(button_text)
self.button_delete.clicked.connect(self.delete_widget)
self.layout = QHBoxLayout(self)
self.layout.addWidget(self.label, alignment=Qt.AlignmentFlag.AlignCenter)
self.layout.addWidget(self.button_delete, alignment=Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignRight)
def delete_widget(self):
self.deleteLater()
class MainWindow(QMainWindow):
def __init__(self) -> None:
super().__init__()
self.setWindowTitle("MainWindow")
self.setObjectName("main_window")
central_widget = QWidget(self)
central_widget.setObjectName("central_widget")
self.setCentralWidget(central_widget)
self.scroll_area = QScrollArea()
self.scroll_area.setObjectName("scroll_area")
self.scroll_area.setWidgetResizable(True)
self.scroll_widget = QWidget()
self.scroll_widget.setAutoFillBackground(True)
self.scroll_widget.setStyleSheet("border-radius: 10px;")
self.widget_layout = QVBoxLayout(self.scroll_widget)
self.widget_layout.setContentsMargins(5, 5, 5, 0)
self.widget_layout.setSpacing(15)
self.scroll_area.setWidget(self.scroll_widget)
create_label_btn = QPushButton("Create")
create_label_btn.clicked.connect(self.create_label)
self.main_layout = QVBoxLayout(central_widget)
self.main_layout.addWidget(self.scroll_area)
self.main_layout.addWidget(create_label_btn)
def create_label(self) -> None:
new_widget = SubWidget("New Label", "Delete", self.widget_layout)
self.widget_layout.addWidget(new_widget, alignment=Qt.AlignmentFlag.AlignCenter)
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
window = MainWindow()
window.setFixedSize(QSize(350, 500))
window.show()
app.exec()

作为一个选项: