2009-09-07 49 views
1

在Python和Pyqt中 - 我有一個簡單的類來實例化一個Label類和一個GroupBox類。Pyqt GroupBox育兒

根據文檔,創建時將Groupbox傳遞給Label應該使Groupbox成爲Label的父項。但是,我必須在這裏錯過簡單的東西。當我創建組框它的罰款,但是當我創建的標籤 - 它出現扭曲(或者後面的分組框?)

乾杯 -

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


class FileBrowser(QMainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 

     self.setGeometry(0, 0, 920, 780) 
     self.initClasses() 

    def initClasses(self): 
     # GroupBox 
     self.groupBox1 = GroupBox(self, QRect(20, 10, 191, 131), 'Shot Info') 

     # Label 
     self.labelGroup1_ShotInfo = Label(self, QRect(10, 26, 52, 15), 'Film') 


class GroupBox(QWidget): 
    def __init__(self, parent, geo, title): 
     QWidget.__init__(self, parent) 
     obj = QGroupBox(parent) 
     obj.setGeometry(geo) 
     obj.setTitle(title) 

class Label(QWidget): 
    def __init__(self, parent, geo, text): 
     QWidget.__init__(self, parent) 
     obj = QLabel(parent) 
     obj.setGeometry(geo) 
     obj.setText(text) 



def main(): 
    app = QApplication(sys.argv) 
    w = FileBrowser() 
    w.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 
+0

你實際上沒有通過groupbox作爲父母,而是自我,這是主窗口。儘管如此,wanswer應該指向正確的方向。 – mandel 2009-09-10 06:56:10

回答

2

的問題是,你不使用的佈局。因爲你沒有使用一個,所以這兩個小部件都被渲染成一個在另一個之上。這當然取決於你想要做什麼,但下面應該是一個很好的例子:

class FileBrowser(QMainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 

     self.setGeometry(0, 0, 920, 780) 
     self.initClasses() 
     # changes 
     layout = QVBoxLayout(self) # create layout out 
     layout.addWidget(self.groupBox1) # add widget 
     layout.addWidget(self.labelGroup1_ShotInfo) # add widget 
     # set my layout to make sure contents are correctly rendered 
     self.setLayout(layout) 

    def initClasses(self): 
     # GroupBox 
     self.groupBox1 = GroupBox(self, QRect(20, 10, 191, 131), 'Shot Info') 

     # Label 
     self.labelGroup1_ShotInfo = Label(self, QRect(10, 26, 52, 15), 'Film') 

上面的例子使用垂直佈局,並解決了這個問題。