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

时间:2015-05-05 13:23:49

标签: python macos qt layout pyqt

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

  • 元素似乎需要更多的空间(大多数是bt_bookmark,它不会缩小到预期的大小)
  • 元素之间使用了很多空间(这是最烦人的事情)

怎样才能缩小到最低限度?是否存在我们需要在全球或其他任何方面设置的保证金政策?

以下是用于测试用例的代码:

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):
        # http://stackoverflow.com/a/28667119/446302
        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_())

捕获:

On Ubuntu 14.04

On OSX 10.10.3

1 个答案:

答案 0 :(得分:1)

要缩小小部件之间的空间,可以使用QBoxLayout.setSpacing()

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

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