2009-09-07 2 views
1

Python과 Pyqt에서 - 나는 Label 클래스와 GroupBox 클래스를 인스턴스화하는 간단한 클래스를 가졌다.Pyqt GroupBox parenting

docs에 따르면, 생성시 Label에 Groupbox를 전달하면 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를 부모로 전달하지 않고 self를 기본 창으로 전달합니다. 그럼에도 불구하고 wanswer를 통해 올바른 방향으로 안내해야합니다. – mandel

답변

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') 

위의 예는 수직 레이아웃을 사용하여 문제를 해결합니다.