连接QPushButton的大小
我有一个像网格一样的视图,里面放了很多 QPushButton 按钮。这些按钮的内容不是固定的,所以每一列的大小会动态变化。我希望每一列的大小都一样,这样看起来更美观。
现在我在显示这个组件之后使用了一个调整大小的函数,因为我发现如果在显示之前调用这个函数,什么都不会改变。不过我觉得我的解决方案看起来不太好。有没有更好的方法呢?
我的函数:
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 的回答):
想要的效果:
这是我得到的效果:
我的系统:
Arch Linux x86_64,Python 3.2 或 2.7.1,PyQt 4.8.4,Qt 4.7.3
1 个回答
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()
这是生成的对话框的截图:
希望这和你想做的类似。