我在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的答案):
期望的外观:

我得到的是:

我的系统:
Arch x86_64,Python3.2或2.7.1,PyQt 4.8.4,QT4.7.3
发布于 2011-05-18 14:21:30
我很抱歉,如果这不是一个真正的答案(评论有点长),但我想知道您使用的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()下面是生成对话框的屏幕截图:

希望这与你想要做的事情是相似的。
https://stackoverflow.com/questions/6034605
复制相似问题