2017-08-07 1 views
0

Besoin d'aide s'il vous plaît pour expliquer pourquoi ce qui suit ne fonctionne pas. Environnement: Python 3.4, Gtk3.0, expérience limitée de Python Le fichier selectcontact.py contient du code permettant de sélectionner l'un des nombreux enregistrements et de renvoyer sa clé à son processus parent pour l'utiliser dans au moins trois autres actions.Transfert de données entre les fichiers Python

extrait de code de la classe parente:

…. 
     self.cindex = 0 
…. 
    def editcontact_clicked (self, menuitem): 
     import selectcontact 
     selectcontact.SelectContactGUI(self) 
     print ('From Manage ', self.cindex) 
     if self.cindex > 0: 
      import editcontact 
      editcontact.EditContactGUI(self.db, self.cindex) 

....

extrait de code de selectcontact: classe SelectContactGUI: def initialisation (auto, parent_class):

self.builder = Gtk.Builder() 
    self.builder.add_from_file(UI_FILE) 
    self.builder.connect_signals(self) 

    self.parent_class = parent_class 
    self.db = parent_class.db 
    self.cursor = self.db.cursor(cursor_factory = psycopg2.extras.NamedTupleCursor) 

    self.contact_store = self.builder.get_object('contact_store') 

    self.window = self.builder.get_object('window1') 
    self.window.show_all() 

def select_contact_path(self, path): 
    self.builder.get_object('treeview_selection1').select_path(path) 

def contact_treerow_changed (self, treeview): 
    selection = self.builder.get_object('treeview_selection1') 
    model, path = selection.get_selected() 
    if path != None: 
     self.parent_class.cindex = model[path][0] 
     print ('From select ', self.parent_class.cindex) 
    self.window.destroy() 

.... Window1 est déclaré comme "modal", donc je m'attendais à ce que l'appel à selectcontact agisse comme un sous-programme, de sorte que editcontact ne soit pas appelé tant que le contrôle n'a pas été transmis au parent. Le bit parent_class fonctionne parce que le contact_store est correctement renseigné. Toutefois, le transfert vers le parent semble ne pas fonctionner et les deux instructions d'impression apparaissent dans le mauvais ordre: De Manage 0 De select 2 Commentaires reçus avec reconnaissance. Graeme

Répondre

0

"Modal" se réfère uniquement aux fenêtres. C'est-à-dire qu'une fenêtre modale empêche d'accéder à la fenêtre parente.

Cela a peu à voir avec le code en cours d'exécution. Je ne suis pas familier avec ce framework de fenêtrage particulier, mais j'ai travaillé avec un thread séparé pour GUI et au moins un pour le traitement, pour garder l'interface graphique responsive, et les boucles de messages dans toutes les fenêtres actives, pas seulement celle actuellement avec l'accent. Le dialogue modal n'a aucun contrôle sur le code dans les autres threads qui sont exécutés quand.

Vous devriez être en mesure d'entrer dans le débogueur et de voir quels threads sont en cours d'exécution et ce qui est en cours d'exécution dans chaque thread à un moment donné.