2017-08-07 163 views
0

需要一些幫助,請解釋爲什麼以下不起作用。 環境:Python 3.4,Gtk3.0,Python的有限體驗 文件selectcontact.py包含代碼,用於選擇多個記錄中的一個並將其密鑰傳遞迴其父進程以用於其他至少三個操作之一。從父類Python文件之間的數據傳輸

代碼片段:

…. 
     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) 

...。從selectcontact

代碼片段: 類SelectContactGUI: 高清初始化(個體經營,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被聲明爲「模態」,所以我期待調用selectcontact作爲一個子例程,這樣editcontact不會被調用,直到控件傳回給父級。 parent_class位可以工作,因爲contact_store已正確填充。但是,回到父級的傳輸似乎不起作用,並且兩個打印語句以錯誤的順序發生: 自管理0 從選擇2 評論感謝收到。 Graeme

回答

0

「Modal」僅指窗口。也就是說,模態窗口阻止訪問父窗口。

它與正在運行的代碼無關。我對這個特定的窗口框架並不熟悉,但我曾經使用過的任何GUI都有一個單獨的線程,並且至少有一個用於處理,以保持GUI響應,並且消息循環在所有活動窗口中運行,而不僅僅是當前的窗口與焦點。模態對話框無法控制何時執行其他線程中的代碼。

你應該能夠進入調試器,看看在任何給定的時間線程正在運行以及在每個線程中運行的是什麼。