连接QPushButton的尺寸

时间:2011-05-17 17:17:37

标签: python pyqt

我有一个QPushButtons的网格状视图。按钮内容不是静态的,因此列大小会动态扩展。出于美学原因,我希望每列的列大小相同。

现在我在显示小部件后使用adjust_sizes函数,因为我注意到如果在显示小部件之前调用它,则没有任何更改。但我的解决方案对我来说似乎很难看。有更好的方法吗?

我的功能:

def adjust_sizes(self):
    max_width=0
    for i in self.buttons:
        if i.geometry().width() > max_width : 
            max_width=i.geometry().width()
    for i in self.buttons: i.setMinimumSize(max_width,0)

这就是我如何使用它:

g=launcher()
g.show()
g.adjust_sizes()

有没有更好的方法呢?

修改 至于澄清这里是所需的截图(看看Raceyman的答案):

期望的样子:

http://i.stack.imgur.com/aJ9wO.png

这是我得到的:

enter image description here

我的系统:

Arch Linux x86_64,Python 3.2或2.7.1,PyQt 4.8.4,Qt 4.7.3

1 个答案:

答案 0 :(得分:1)

我很抱歉,如果这不是一个真正的答案(评论有点长),但我想知道你使用的PyQt版本是否可能是原因的一部分。我正在使用4.8.3(我认为),当我使用QGridLayout以这种方式构建对话框时,默认情况下,列都是相同的大小。这是一个(非常非常非常粗糙)的例子:

from PyQt4 import QtGui, QtCore
import sys

class launcher(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        mainlayout = QtGui.QGridLayout()
        buttons = [['a', 'aaaa', 'aaaaaaa', 'a'], 
                   ['b', 'bbbbbbbbbb', 'bbbbb', 'b'], 
                   ['c','c','c', 'c']]
        for i, buttonrow in enumerate(buttons):
            for j, button in enumerate(buttonrow):                
                mainlayout.addWidget(QtGui.QPushButton(button), i, j)
        self.setLayout(mainlayout)
        self.exec_()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    g = launcher()
    g.show()

以下是结果对话框的屏幕截图:

enter image description here

希望这与你想要做的类似。