2016-03-08 44 views
0

我有main.py文件和uiwidgets.py中的一些UI類的主應用程序。當事件發生時,Python返回類的值

在main.py

我:

import uiwidgets as uiw 
uiw.MultiColumnListbox(header, data) 

def doSomething(self, n) 
    do something with n 

在uiwidgets.py我:

class MultiColumnListbox(object): 

def __init__(self, header, data): 
    self.header=header 
    self.data=data 

... 

    self.tree.bind("<Double-Button-1>", self.OnClick) 

def OnClick(self, event): 
    global return_index 
    item = self.tree.identify('item',event.x,event.y) 
    if item is not "":  
     return_index = (int((item[1:4]),16) - 1) 
     n = self.data[return_index][0] 

我需要從類返回n值在main.py當用戶點擊小部件。我能怎麼做?

+1

從主要進口DoSomething的; doSomething(n) – wong2

+0

以這種方式我有一個循環依賴導入與錯誤「ImportError:無法導入名稱'doSomething'」 – gaiapac

回答

0

你可以在and的uiwidgets.py處創建一個全局變量,並將其命名爲'transfervar'或類似的東西。然後在main.py中再次導入uiwidgets.py。它應該給你在main.py中的'transfervar'。

如果n的值很複雜或很長,也可以將它寫入文本文件。但是,你需要知道如何編寫和讀取文件。這是非常好的在「思考pythonger」學習,由艾倫·B·道尼,第14章。

您與全局變量的代碼如下所示:

transfervar = None #just to create, you could set it 0, too 

    class MultiColumnListbox(object): 

    def __init__(self, header, data): 
     self.header=header 
     self.data=data 

    ... 

     self.tree.bind("<Double-Button-1>", self.OnClick) 

    def OnClick(self, event): 
     global return_index 
     item = self.tree.identify('item',event.x,event.y) 
     if item is not "":  
      return_index = (int((item[1:4]),16) - 1) 
      n = self.data[return_index][0] 
      global transfervar  #needs to be declared as global 
      transfervar = n 
+0

感謝您的答案,但我需要回應該事件,所以我需要知道是否以及何時變量傳遞變化 – gaiapac

相關問題