我正在用Tkinter編寫一個Python 3程序,它在Windows 8.1下運行。Python中的全局變量和文件名
我需要選擇兩個文件夾,它們將在另一個功能中一起使用。目前,我有兩個選擇文件按鈕,它們打開選擇文件夾對話框:
def select_file_1(self):
global first_file
first_file = filedialog.askdirectory()
def select_file_2(self):
global second_file
second_file = filedialog.askdirectory()
這些正常工作:每當被點擊的按鈕,它出現並詢問一個目錄。
然後,只有一次使用first_file和second_file變量,在使用它們之前我也會注意到它們是全局變量。這是選擇了其他按鈕時:嘗試與f1 = open
閱讀上面開始線的時候NameError: name 'first_file' is not defined
:
def create_composite(self):
global first_file
global second_file
f1 = open(first_file, "r")
f2 = open(second_file, "r")
然而,這會導致下面的錯誤。
如果它有助於清晰起見,下面的屏幕截圖中是我的界面的相關部分。通過單擊第一個選擇文件調用select_file_1,並通過單擊第二個選擇文件調用select_file_2。然後,通過單擊創建類來調用create_composite。
我不知道是什麼原因導致你的問題,但爲什麼不讓他們的'self'的屬性呢?像'self.first_file'和'self.second_file'。 (或者甚至可能只是'self.files') – Kevin 2015-01-09 20:24:56
在python中進行10多年的編程,我還沒有使用'global'關鍵字。如果你使用它,你很可能應該重構你的代碼。 – Gerrat 2015-01-09 20:26:01
@Gerrat,偶爾我將單例類重構成模塊,然後成員變量變成模塊全局變量 - 並且方法變成使用'global'的函數。:)不知道它是一個好的模式,但是...或者是單例。 – 2015-01-09 20:30:24