PyQt4 - 如何缩小 Mac OSX 上的布局?

PyQt4 - How to shrink the layout on Mac OSX?

对于相同的 PyQt4 代码,布局在 Linux 和 Windows 上看起来非常相似。但是对于 MacOSX,我们看到:

怎么能缩小到最小?是否有我们需要在全局或其他方面设置的保证金政策?

这是用于测试用例的代码:

from PyQt4 import QtGui, QtCore
import sys


class GUI(QtGui.QWidget):
    def __init__(self):
        super(GUI, self).__init__()

        vbox_layout = QtGui.QVBoxLayout()
        for i in range(4):
            hbox_layout = QtGui.QHBoxLayout()
            bt_bookmark = QtGui.QPushButton()
            bt_bookmark.setGeometry(0, 0, 15, 15)
            bt_bookmark.setIcon(QtGui.QIcon("./bookmark_on.png"))
            hbox_layout.addWidget(bt_bookmark)
            hbox_layout.addWidget(QtGui.QPushButton("Button1"))
            hbox_layout.addWidget(QtGui.QLabel("Some text here."))
            hbox_layout.addWidget(QtGui.QPushButton("Button2"))
            hbox_layout.addWidget(QtGui.QPushButton("Button3"))
            vbox_layout.addLayout(hbox_layout)

        self.setLayout(vbox_layout)

        self.setWindowTitle("Test Layout")
        self.show()
        self.resize_window_to_minimum()

    def resize_window_to_minimum(self):
        # 
        def _func_to_call():
            self.resize(self.minimumSizeHint())
        QtCore.QTimer.singleShot(500, _func_to_call)


if __name__ == "__main__":
    app = QtGui.QApplication([])
    gui = GUI()
    sys.exit(app.exec_())

捕获:

要减少小部件之间的 space,您可以使用 QBoxLayout.setSpacing()

关于按钮的大小,您可以尝试通过设置样式表的边距或填充来调整。

我个人会将 bt_bookmark 的拉伸设置为 0 (hbox_layout.addWidget(bt_bookmark, stretch=0)),将其他按钮的拉伸因子设置为 1。这样按钮 bt_bookmark 就不会window 调整大小时增长。