2009-09-07 3 views
1

В Python и Pyqt - у меня есть простой класс, который создает класс Label и класс GroupBox.Pyqt GroupBox parenting

Согласно документам, передача Groupbox в Label при создании должна сделать Groupbox родительским элементом Label. Однако, я, должно быть, пропустил что-то простое здесь. Когда я создаю GroupBox это хорошо, когда я создаю ярлык, однако - это искажается (или, возможно, за GroupBox?)

Приветствия -

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

Вы фактически не передаете групповой ящик как родительский, а сам - это главное окно. Тем не менее, 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') 

Приведенный выше пример использует вертикальную компоновку и решает эту проблему.

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