Подключение размеров QPushButton - PullRequest
0 голосов
/ 17 мая 2011

У меня есть сетчатый вид с помощью 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()

Есть ли лучший способ сделать это?

Редактировать: Что касается пояснения, здесь приведены желаемые скриншоты (посмотрите на ответ Расимана):

Желаемый вид:

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 Ответ

1 голос
/ 18 мая 2011

Приношу свои извинения, если это не совсем ответ (это немного длинно для комментариев), но мне интересно, может быть, версия 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

Надеюсь, это похожек тому, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...