2017-07-30 4 views
0

Je suis en train de concevoir une application utilisant PyQt qui gérera plusieurs instances de Selenium. Chaque instance a une QFrame avec des informations et des contrôles uniques et peut être parcourue à partir de la fenêtre principale.PyQt - Gestion des onglets depuis la classe externe

class Instance(QFrame): 

    def __init__(self): 
     super().__init__() 
     self.username = "whatever" 

     ... 

     self.startButton = QPushButton('Start') 
     self.startButton.clicked.connect(lambda: self.engineStart()) 

     self.exitButton = QPushButton('Exit') 
     self.exitButton.clicked.connect(lambda: self.engineExit()) 

     ... 

Comment ça ressemble

Les utilisateurs doivent être en mesure de créer et supprimer des instances à volonté.

La création d'une tabulation ne pose aucun problème. J'ai un "+" bouton défini comme . Il est connecté à une méthode simple pour ajouter l'onglet.

class App(QFrame): 

    def __init__(self): 

     ... 

    def addNewTab(self): 
     t = Instance() 
     self.tabs.addTab(t, t.username) 

Le problème est, comment puis-je utiliser le bouton « Exit » de la classe instance « à l'intérieur » pour supprimer les onglets qui sont gérés de la classe « en dehors » de la fenêtre principale? Je besoin d'un moyen d'appeler removeTab()

+0

'RemoveTab() 'a besoin d'un index, où décidez-vous de l'index? – eyllanesc

Répondre

0

Pour faire ce que vous voulez, vous devez créer une fente dans la fenêtre principale, et le connecter au signal cliqué sur le bouton comme indiqué ci-dessous:

class App(QFrame): 

    def __init__(self): 
     ... 
    def addNewTab(self): 
     t = Instance() 
     self.tabs.addTab(t, t.username) 
     t.exitButton.clicked.connect(self.slot) 

    def slot(self): 
     self.tabs.removeTab(your_index)