2010-11-13 36 views
1

Je fais un petit plasmoid python qui traite des ressources à distance. Voici le code: glpoidplusieurs mises en page/transitions de mise en page dans un plasmoid python

Il offre une vue des billets (le défaut), une vue qui permettent le remplissage utilisateur et l'envoi d'un nouveau billet, et un dernier à voir un détail de billets ...

Mon problème est que je ne sais pas comment "fermer" la mise en page actuelle lorsque je passe à une autre vue (ou la faire disparaître).

Pour chaque mise en page, i définir des éléments que j'ajouter à la définition de la mise en page et le dernier i afficher la nouvelle mise en page:

Dans un premier temps, j'afficher la vue par défaut avec self.view_tickets_ui(). Chaque mise en page est définie en name_ui() méthodes qui redéfinissent chacune la mise en page et la transmettent à l'applet.

Pour reprendre il est défini comme ceci:

class GLPIApplet(plasmascript.Applet): 
    def __init__(self,parent,args=None): 
     plasmascript.Applet.__init__(self,parent) 

    def init(self): 
     self.setHasConfigurationInterface(False) 
     self.setAspectRatioMode(Plasma.Square) 
     self.resize(400,650) 
     # new ticket button 
     self.new = Plasma.PushButton() 
     self.new.setText('Nouveau Ticket') 
     self.connect(self.new, SIGNAL('clicked()'), self.new_ticket_ui) 
     # refresh button 
     self.refresh = Plasma.PushButton() 
     self.refresh.setText('Rafraichir') 
     self.connect(self.refresh, SIGNAL('clicked()'), self.view_tickets_ui)  
     # initialize 
     self.view_tickets_ui() 

    def view_tickets_ui(self, message=None): 
     # layout of ticket view 
     self.layout = QGraphicsLinearLayout(Qt.Vertical) 
     self.layout.itemSpacing(3)   
     self.layout.addItem(self.new) 
     self.view_tickets() 
     self.layout.addItem(self.refresh) 
     self.applet.setLayout(self.layout) 

    def new_ticket_ui(self, message=None): 
     # layout of a new ticket 
     self.layout = QGraphicsLinearLayout(Qt.Vertical) 
     self.layout.itemSpacing(3) 
     message_label = Plasma.Label() 
     message_label.setText('the message:')    
     self.layout.addItem(message_label) 
     self.applet.setLayout(self.layout) 

Ici définit simplement initialisation des boutons, puis appelez view_tickets_ui() qui a mis certains éléments et afficher la mise en page. Si j'appelle new_ticket_ui() après, il ajoutera des éléments à la disposition actuelle ... donc les deux sont affichés au même endroit.

Comment puis-je gérer cela s'il vous plaît ??

Répondre

1

Vous pouvez utiliser un Plasma.TabBar avec des onglets masqués et basculer entre eux, comme mentionné sur IRC. Connectez les signaux clicked aux emplacements qui basculent entre les onglets et tout devrait bien se passer.

En outre, une note sur le style: vous devez utiliser le new signal/slot API autant que possible:

self.connect(self.refresh, SIGNAL('clicked()'), self.view_tickets_ui) 

devrait devenir

self.refresh.clicked.connect(self.view_tickets_ui). 
+0

Merci pour ces conseils Einar, je suis modifier mon code pour voir le résultat et puis dites-vous comment ça va. –

+0

ça marche mieux: merci encore! –