PySide6: 如何在QHBoxLayout中去除按钮之间的间距?

3

如何在设置按钮大小后消除它们之间的间距?

每当我设置按钮大小时,都会添加一个空格。

我尝试了setSpacing,但它没有起作用。这可以通过sizePolicy或其他方法完成吗?

以下是我的代码:

from PySide6.QtCore import Qt, QSize
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(QSize(800, 600))
        self.setWindowTitle('Horizontal Layout')

        self.container = QWidget()
        self.horizontalLayout = QHBoxLayout()

        self.button_1 = QPushButton('Button 1')
        self.button_1.setFixedSize(QSize(70, 60))
        self.button_2 = QPushButton('Button 2')
        self.button_2.setFixedSize(QSize(70, 60))
        self.button_3 = QPushButton('Button 3')
        self.button_3.setFixedSize(QSize(70, 60))

        self.horizontalLayout.addWidget(self.button_1)
        self.horizontalLayout.addWidget(self.button_2)
        self.horizontalLayout.addWidget(self.button_3)

        self.container.setLayout(self.horizontalLayout)
        self.setCentralWidget(self.container)


app = QApplication([])
window = MainWindow()
window.show()
app.exec()

好的,你已经使用了 self.setMinimumSize(),但是在你的代码中没有找到 setSpacing() 或者对齐方式的痕迹,因此布局管理器会根据项目可能占用的大小以及可用大小来正确地排列项目间距。那么预期的结果是什么? - musicamante
@musicamante 现在我已经移除了 setMinimumSize() 并添加了 self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setSpacing(0),但是当窗口大小调整时仍然存在空间。 我使用 Tkinter 创建了界面,现在正在将其转换为 PySide6。这是它的图片。链接 - Spark Drago
在你想要并排放置的按钮之前和/或之后使用 addStretch()。我建议你使用设计师中的布局进行一些实验,以便更好地了解Qt中的布局管理器是如何工作的。 - musicamante
谢谢,你解决了我的问题。它有效了。 - Spark Drago
1个回答

1

在按钮之前和/或之后使用addStretch()。您可以在这里找到更多信息。

示例:

from PySide6.QtCore import Qt, QSize
from PySide6.QtWidgets import QApplication, QMainWindow,QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(QSize(600, 400))
        self.move(600, 300)
        self.setWindowTitle('Horizontal Layout')

        self.container = QWidget()
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setSpacing(0)

        self.button_1 = QPushButton('Button 1')
        self.button_1.setFixedSize(QSize(70, 60))
        self.button_2 = QPushButton('Button 2')
        self.button_2.setFixedSize(QSize(70, 60))
        self.button_3 = QPushButton('Button 3')
        self.button_3.setFixedSize(QSize(70, 60))
        self.button_4 = QPushButton('Button 4')
        self.button_4.setFixedSize(QSize(70, 60))
        self.button_5 = QPushButton('Button 5')
        self.button_5.setFixedSize(QSize(70, 60))
        self.button_6 = QPushButton('Button 6')
        self.button_6.setFixedSize(QSize(70, 60))
        self.button_7 = QPushButton('Button 7')
        self.button_7.setFixedSize(QSize(70, 60))

        self.horizontalLayout.addWidget(self.button_1)
        self.horizontalLayout.addWidget(self.button_2)
        self.horizontalLayout.addWidget(self.button_3)
        self.horizontalLayout.addStretch()
        self.horizontalLayout.addWidget(self.button_4)
        self.horizontalLayout.addWidget(self.button_5)
        self.horizontalLayout.addStretch()
        self.horizontalLayout.addWidget(self.button_6)
        self.horizontalLayout.addWidget(self.button_7)

        self.setLayout(self.horizontalLayout)


app = QApplication([])
window = MainWindow()
window.show()
app.exec()

这将产生以下结果:QHBoxLayout

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接