如果没有使用getter,则元组返回数值

时间:2017-08-15 11:34:15

标签: python tuples

我先说我弄清楚如何解决这个问题,但我不确定其根本原因。

我写了一个简单的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,无论输入什么 - 数字,字母,混合等

有人可以解释我在这里失踪的内容吗?

1 个答案:

答案 0 :(得分:2)

假设entrytkinter.Entry窗口小部件的列表,请考虑在执行以下操作时您正在执行的操作:

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

所以entry[1]是一个小部件。在对象上调用str()时,请求其字符串表示形式。没有什么可以保证你会在这里获得条目的内容

相反,你得到的是小工具的路径。该路径基本上是小部件位于tkinter框架内的描述。它是来自小部件主人的hiearchy中所有名称的组合,用点分隔。

因此值.58366352.58366416表示窗口小部件的名称本身为58366416,并且它存在于名称为58366352且具有根(没有名称)的不同窗口小部件中)作为其父母。

但是为了从条目小部件中获取实际文本,您必须调用Entry.get()