2017-08-15 48 views
0

讓我先說我想出瞭如何解決這個問題,但我不確定潛在的原因。如果沒有使用getter,返回數字值的元組

我寫了一個簡單的GPS Tagger,它使用tkinter接受各種輸入,可以通過pynmea2獲得GPS座標,然後將每個填充字段輸出到CSV文件。然後用戶可以清除輸入字段以移至下一個點。

我昨天在使用它的時候意識到,一個特定的字段經常遞增1,所以對我來說包含一個讓它自動遞增的選項是有意義的。我用tk.Checkbutton來做到這一點。

在內部和在CSV文件中使用的字段名稱作爲元組存儲,例如,

fields = 'gs_rated_input_voltage', ... 'gs_equipment_location' 

當被命令保存當前輸入時,for循環遍歷所有填充文本框,並將它們從該函數中返回。這些條目作爲列表存儲在函數中,並且由於返回類型沒有聲明爲任何不同,我假設元組內容正在存儲在列表中。

當命令來清除輸入,如果特定字段被填充的複選框選中,值存儲和切片:

text = entry[1].get() 
mod_text = str(text) 
last_int = int(mod_text[-1:]) 
mod_text = mod_text[:-1] + str(last_int + 1) 
entry[1].delete(0, tk.END) 
entry[1].insert(0, mod_text) 

的條目包含數字,字母和連字符,但最後一個字符是可靠的一個數字 - 這是有效的,但作爲一個旁人,如果有人有更好的方式我全部耳朵。

所有這一切說,我發現如果我沒有在第一行包括.get(),每次都將文本設置爲.58366352.58366416,無論輸入什麼 - 數字,字母,a混合等

有人可以解釋我在這裏失蹤?

回答

2

假設entrytkinter.Entry部件,想想你在做什麼,當你做了以下列表:

text = entry[1] 
mod_text = str(text) 

所以entry[1]是一個小部件。當您在對象上調用str()時,您請求其字符串表示形式。沒有什麼可以保證你會在這裏得到輸入的內容

相反,你得到的是路徑到小部件。路徑基本上是小部件在tkinter框架內生存的描述。它是從小部件的主控制器下來的所有名稱的組合,由點分隔。

所以此值.58366352.58366416意味着該插件本身的名稱是58366416,它一個不同的窗口小部件與具有根(沒有名)作爲其父的名稱58366352中存在。

但是,爲了從輸入小部件中獲取實際文本,您必須致電Entry.get()

+0

不知道爲什麼我最初沒有看到;由於條目[0]是標籤,因此我在條目[1]中包含了該部件中包含的文本。 –