2016-06-22 8 views
1

Mein Problem ist wahrscheinlich ein ziemlich naives; Wie auch immer, ich bin ein wenig verwirrt mit PyQt's ordentlicher Anordnung und Anzeige von Steuerelementen in einem Tabbed-Steuerelement (tabWidget).Kontrollen innerhalb Tabs nicht in PyQt

Hier ist mein Testcode:

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

class tabdemo(QMainWindow): 
    def __init__(self): 
     super(tabdemo, self).__init__() 
     self.setAttribute(Qt.WA_DeleteOnClose) 
     self.tabs = QTabWidget() 
     self.tab1 = QWidget() 
     self.tab2 = QWidget() 
     self.tabs.addTab(self.tab1,"Form View") 
     self.tabs.addTab(self.tab2,"Matrix View") 
     self.tab1UI() 
     self.tab2UI() 
     self.setWindowTitle("tab demo") 

    def tab1UI(self): 
     l1 = QListView() 
     l2 = QListView() 
     model = QStringListModel()   
     model.setStringList(QString("Item 1;Item 2;Item 3;Item 4").split(";"))  
     l1.setModel(model) 
     l2.setModel(model) 
     hbox = QHBoxLayout() 
     hbox.addWidget(l1) 
     hbox.addStretch() 
     hbox.addWidget(l2) 
     self.tab1.setLayout(hbox) 

    def tab2UI(self): 
     vbox = QVBoxLayout() 
     tbl1 = QTableWidget() 
     tbl1.setRowCount(5) 
     tbl1.setColumnCount(5) 
     vbox.addWidget(tbl1) 
     tbl1.setItem(0, 0, QTableWidgetItem("1")) # row, col 
     self.tab2.setLayout(vbox) 

def main(): 
    app = QApplication(sys.argv) 
    ex = tabdemo() 
    ex.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

Wenn ich es laufen, ich das Hauptformular erhalten angezeigt, aber nichts scheint in seinem Inneren. Wenn ich das Formular jedoch als direkten Nachfolger von QTabWidget (anstelle von QMainWindow) erstelle, wird es OK ausgeführt, wobei alle darin enthaltenen Registerkarten und Steuerelemente korrekt angezeigt werden!

Ich muss mit einem QMainWindow-Nachkommen arbeiten, da meine reale Anwendung Menüs, Statusleiste und eine Symbolleiste verwendet. Es sieht also so aus, als wäre ich mit der Klassenhierarchie von PyQt verwechselt worden. Irgendwelche Hinweise?

Vielen Dank im Voraus für jede Hilfe, die Sie zur Verfügung stellen können.

Antwort

1

Sie haben das self.tabs Widget als zentrales Widget in Ihrer Klasse

class tabdemo(QMainWindow): 
    def __init__(self): 
     super(tabdemo, self).__init__() 
     self.setAttribute(Qt.WA_DeleteOnClose) 
     self.tabs = QTabWidget() 
     self.tab1 = QWidget() 
     self.tab2 = QWidget() 
     self.tabs.addTab(self.tab1,"Form View") 
     self.tabs.addTab(self.tab2,"Matrix View") 
     self.tab1UI() 
     self.tab2UI() 
     self.setWindowTitle("tab demo") 
     self.setCentralWidget(self.tabs) 

Beachten Sie die letzte Zeile des Codes zu setzen: self.setCentralWidget(self.tabs)

+0

Danke! Das hat auch funktioniert! – maurobio

2

Sie verfehlten nur einen Schritt. Sie müssen centralWidget zu Ihrem QMainWindow festlegen. Sie können dies tun, indem Sie diese Zeile am Ende Ihrer __init__ Methode hinzu:

self.setCentralWidget(self.tabs) 

Diese Tabs an das zentrale Widget Widget-Sets verwendet setCentralWidget und erzeugt ein Hauptfenster, das wie folgt aussieht:

Main Window

+0

Danke! Das hat für mich funktioniert. – maurobio