2013-03-04 3 views
1

Я пишу простой калькулятор с помощью PyQt. В моем коде я использую QGridLayout для компоновки виджетов. Но есть проблема. Я не могу найти способ изменить размеры виджетов. Я попытался использовать QWidget.resize и insertStreach, но это не работает, как мне нужно. Какая функция может заменить QWidget.resize?Почему PyQt QGridLayout не изменяет размер?

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 

class Button(QPushButton): 
    def __init__(self, text, parent, TextObject): 
     super().__init__(text, parent=parent or None) 
     self.clicked.connect(TextObject.SLOT_TextInsert('%s' %(text))) 

class Text(QLineEdit): 
    def __init__(self, parent): 
     super().__init__(parent=parent) 
     self.show() 

    def SLOT_TextInsert(self, text): 
     return lambda: self.insert('%s' %(text)) 

    def SLOT_TextGet(self): 
     text = self.text() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 

    root = QWidget() 
    text = Text(root) 
    plus = Button('+', root, text) 
    minus = Button('-', root, text) 
    multiple = Button('*', root, text) 
    divide = Button('/', root, text) 
    null = Button('0', root, text) 
    dot = Button('.', root, text) 
    equal = Button('=', root, text) 
    clean = Button('Ce', root, text) 

    layout = QGridLayout(root) 
    layout.setSpacing(2) 
    layout.addWidget(text, 1, 1, 1, 5) 
    layout.addWidget(plus, 2, 4) 
    layout.addWidget(minus, 2, 5) 
    layout.addWidget(multiple, 3, 4) 
    layout.addWidget(divide, 3, 5) 
    layout.addWidget(clean, 4, 4, 1, 2) 
    layout.addWidget(null, 5, 1, 1, 2) 
    layout.addWidget(dot, 5, 3) 
    layout.addWidget(equal, 5, 4, 1, 2) 

    num_list = list() 
    row=2; col=1 
    for i in range(0,9): 
     num_list.append(Button('%s' %(i+1), root, text)) 
     layout.addWidget(num_list[i], row, col) 
     col = col+1 
     if i == 2 or i == 5: 
      col = 1; row = row+1 

    root.resize(10,10) 
    root.show()   
    sys.exit(app.exec_()) 

ответ

1

См QWidget::sizePolicy:

Кнопка типа виджетов установить политику размера, чтобы указать, что они могут растянуть по горизонтали, но фиксируются в вертикальном положении.

Для того, чтобы сделать кнопки также изменить размер по вертикали, необходимо изменить политику размера ваших кнопок:

class Button(QPushButton): 
    def __init__(self, text, parent, TextObject): 
     super().__init__(text, parent=parent or None) 
     self.setSizePolicy (QSizePolicy.Expanding, QSizePolicy.Expanding) 
     self.clicked.connect(TextObject.SLOT_TextInsert('%s' %(text))) 
+0

Thaks много за помощь! –

Смежные вопросы