2017-08-15 47 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]中包含了该部件中包含的文本。 –