2010-07-28 8 views
0

Je travaille avec PyQt4 pour créer une simple application graphique Python.PyQt4 Boîte de dialogue personnalisée ne montrant pas

La situation est la suivante:

j'ai un QMainWindow afficher un widget central et d'un QDockWidget contenant ce Widget personnalisé:

class ListTagWidget(QWidget): 
     def __init__(self, parent = None): 
      super(ListTagWidget, self).__init__() 
      addButton = QPushButton("&Add Tag...") 
      editButton = QPushButton("&Edit Tag...") 
      removeButton = QPushButton("&Delete Tag") 
      self.taglist = QListWidget() 
      layout = QGridLayout(self) 
      layout.addWidget(self.taglist, 1, 1, 1, 1) 
      layout.addWidget(addButton, 2, 1) 
      layout.addWidget(editButton, 3, 1) 
      layout.addWidget(removeButton, 4, 1) 
      self.setLayout(layout) 
      self.adjustSize() 
      #Connections 
      self.connect(addButton, SIGNAL("clicked()"), self.addTag) 

     def addTag(self): 
      dialog = AddTagDlg(self) 
      dialog.show() 

Je veux basiquement pour afficher cette classe de dialogue personnalisée lorsque addButton est cliqué :

class AddTagDlg(QDialog): 
    def __init__(self, Parent=None): 
     super(AddTagDlg, self).__init__() 
     buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) 
     label = QLabel("Tag Name:") 
     lineEdit = QLineEdit() 
     layout = QGridLayout() 
     layout.addWidget(label, 1, 1) 
     layout.addWidget(lineEdit, 1, 2) 
     layout.addWidget(buttonBox, 2, 1) 
     self.setLayout(layout) 
     self.setWindowTitle("Add Tag...") 

Mais cela ne fonctionne pas. J'ai réussi à créer une ligne de dialogue en changeant la méthode addtag ​​à:

def addTag(self): 
    dialog = QDialog() 
    dialog.show() 

Mais je ne suis pas satisfait de la création de dialogue en ligne. Quelle est mon erreur? Je vous remercie.

EDIT

Le problème était avec le constructeur de la classe de dialogue personnalisée:

class AddTagDlg(QDialog): 
    def __init__(self, Parent=None): 
     super(AddTagDlg, self).__init__(parent) #<--WAS MISSING 
     buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) 
     ... 

Répondre

0

Essayez d'appeler exec_() sur la boîte de dialogue, cela devrait vous montrer la boîte de dialogue.

+0

Merci! J'ai trouvé qu'il était également nécessaire de passer super (AddTagDlg, self) .__ init __ (parent) dans la classe de dialogue personnalisé. Je vais éditer ma question. –

Questions connexes