2016-08-17 2 views
0

J'essaye de créer une boîte de dialogue avec trois onglets en utilisant PyQt. Cependant, je suis ennuyé parce que bien que la boîte de dialogue soit affichée, les widgets incorporés ne sont pas affichés! Je suppose que c'est un problème très simple avec une solution en conséquence très simple, mais je suis frappé! Quelqu'un peut-il donner un indice? Merci d'avance!PyQt - Boîte de dialogue à onglets qui n'affiche pas les widgets intégrés

Voici mon code à ce jour:

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

class TabbedDialog(QDialog): 
    def __init__(self, parent = None): 
     super(TabbedDialog, self).__init__(parent) 

     self.tabWidget = QTabWidget() 
     self.tabWidget.tab1 = QWidget() 
     self.tabWidget.tab2 = QWidget() 
     self.tabWidget.tab3 = QWidget() 

     self.tabWidget.addTab(self.tabWidget.tab1,"Tab 1") 
     self.tabWidget.addTab(self.tabWidget.tab2,"Tab 2") 
     self.tabWidget.addTab(self.tabWidget.tab3,"Tab 3") 
     self.tab1UI() 
     self.tab2UI() 
     self.tab3UI() 
     self.setWindowTitle("tab demo") 

    def tab1UI(self): 
     layout = QFormLayout() 
     layout.addRow("Name",QLineEdit()) 
     layout.addRow("Address",QLineEdit()) 
     self.tabWidget.setTabText(0,"Contact Details") 
     self.tabWidget.tab1.setLayout(layout) 

    def tab2UI(self): 
     layout = QFormLayout() 
     sex = QHBoxLayout() 
     sex.addWidget(QRadioButton("Male")) 
     sex.addWidget(QRadioButton("Female")) 
     layout.addRow(QLabel("Sex"),sex) 
     layout.addRow("Date of Birth",QLineEdit()) 
     self.tabWidget.setTabText(1,"Personal Details") 
     self.tabWidget.tab2.setLayout(layout) 

    def tab3UI(self): 
     layout = QHBoxLayout() 
     layout.addWidget(QLabel("subjects")) 
     layout.addWidget(QCheckBox("Physics")) 
     layout.addWidget(QCheckBox("Maths")) 
     self.tabWidget.setTabText(2,"Education Details") 
     self.tabWidget.tab3.setLayout(layout) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    form = TabbedDialog() 
    retval = form.exec_() 

Répondre

1

ici est ma solution au problème

Sur la méthode init, je déclarais une mise en page, puis ajouté le widget 'tabWidget' à ce mise en page et définissez cette mise en page comme la disposition de votre QDialog.

def __init__(self, parent = None): 
    super(TabbedDialog, self).__init__(parent) 

    self.tabWidget = QTabWidget() 
    self.tabWidget.tab1 = QWidget() 
    self.tabWidget.tab2 = QWidget() 
    self.tabWidget.tab3 = QWidget() 

    self.tabWidget.addTab(self.tabWidget.tab1,"Tab 1") 
    self.tabWidget.addTab(self.tabWidget.tab2,"Tab 2") 
    self.tabWidget.addTab(self.tabWidget.tab3,"Tab 3") 
    self.tab1UI() 
    self.tab2UI() 
    self.tab3UI() 
    self.setWindowTitle("tab demo") 

    # Here is the addition to the code. 
    mainLayout = QVBoxLayout() 
    mainLayout.addWidget(self.tabWidget) 
    self.setLayout(mainLayout) 
+0

Merci, cela a fonctionné parfaitement! – maurobio

+0

Votre bienvenue ... – syncster31