2013-09-23 92 views
3

如果我想創建一個網格佈局未覆蓋整個框架的窗口?我可以通過向網格佈局添加水平佈局並向水平佈局添加拉伸來實現。當我嘗試下面的代碼,我得到這個錯誤:PySide/QT - 如何將水平或垂直佈局添加到網格佈局

TypeError: PySide.QtGui.QGridLayout.addLayout(): not enough arguments

import sys 
from PySide import QtGui 


class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 

     names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/', 
       '4', '5', '6', '*', '1', '2', '3', '-', 
       '0', '.', '=', '+'] 

     hbox = QtGui.QHBoxLayout() 
     hbox.addStretch() 

     vbox = QtGui.QVBoxLayout() 
     vbox.addStretch() 
     grid = QtGui.QGridLayout() 
     grid.addLayout(vbox) 

     self.setLayout(grid) 

     self.move(300, 150) 
     self.setWindowTitle('Calculator') 
     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

添加水平佈局,垂直佈局,反之亦然時,不會發生此錯誤。

感謝您的幫助!

回答

2

根據方法簽名here,必須將佈局添加到QGridLayout的特定行和列中。

但在這種情況下,我想你最好還是加入了網格佈局到VBOX佈局,而不是相反

或者,你可以設置一個列拉伸使用QGridLayout.setColumnStretch()在網格佈局空列。