2009-09-07 7 views
1

En Python et Pyqt - J'ai une classe simple qui instancie une classe Label et une classe GroupBox. Selon docs, en passant la Groupbox à l'étiquette lors de la création devrait faire de la Groupbox le parent de Label. Cependant, je dois manquer quelque chose de simple ici. Lorsque je crée GroupBox c'est bien, quand je crée l'étiquette cependant - il apparaît déformée (ou peut-être derrière GroupBox?)Pyqt GroupBox parenting

Cheers -

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

Vous ne passez pas la zone de groupe en tant que parent mais self qui est la fenêtre principale. Néanmoins par Wanswer devrait vous diriger vers la bonne direction. – mandel

Répondre

2

Le problème est que vous n'utilisez pas une mise en page. Parce que vous n'en utilisez pas, les deux widgets sont rendus les uns sur les autres. Il dépend bien sûr de ce que vous essayez de faire, mais ce qui suit devrait être un bon exemple:

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

L'exemple ci-dessus utilise une mise en page verticale et résout le problème.