条目值在新窗口中显示带有entry_value.get()的空字符串

时间:2018-06-19 08:23:26

标签: python tkinter

我正在设置一个临时的tkinter窗口客户端,如下所示: 他的进一步信息可以通过这样的辅助窗口访问:

当我尝试通过点击更新来更新他的地址时,它最终看起来像这样:

所以我知道后端数据库不是问题,因为我可以更新地址,只需从backend.py脚本调用更新函数即可。但是,从前端开始,当我使用print语句时,每当我进入新窗口时,我发现entry_value.get()是一个空字符串。

所以我尝试全局化变量,我尝试将变量放在函数之外,而不是在主循环中。我正在考虑使用OOP方法,但我相信我不应该完全拆分我的代码并将其更改为OOP,以便entry_value.get()不为空。

我也在寻找这个问题的答案,但我似乎无法在任何地方找到这个特殊的问题。

以下是我的代码中的问题区域:

def open_menu():                                 

    global new_window

    new_window = Tk()

    address_entry_value = StringVar()
    address_entry = Entry(new_window, width = 50, textvariable = address_entry_value)
    address_entry.grid(row = 1, column = 1, columnspan = 3)
    address_entry.delete(0, END)
    address_entry.insert(END, "Insert Address Here")
    print(address_entry_value.get())

def get_selected_row(event):
    try:
        global selected_tuple
        global extended_tuple
        index = listbox.curselection()[0]
        selected_tuple = listbox.get(index)
        selected_tuple = selected_tuple.split()
        extended_tuple = backend.select_client(selected_tuple[0])
    except IndexError:
        pass

def open_clients_entry(event):
    open_menu()

window = Tk()

listbox = Listbox(window, width = 75, height = 10)
listbox.grid(row = 1, column = 0, columnspan = 4, rowspan = 7)

listbox.bind("<Double-Button-1>", open_clients_entry)
listbox.bind("<<ListboxSelect>>", get_selected_row)

open_entry_button = Button(window, width = 12, text = "Open Entry", command = open_menu)
open_entry_button.grid(row = 4, column = 5)

window.mainloop()

我正在使用“在这里插入地址”,目的是使用一个示例而不是使用元组,以及为了简单起见,在数据库中没有使用这些内容来解决问题。

powershell窗口中的预期打印结果应为“Insert Address Here”,而是打印一个空白。因此,当我更新时,地址也变为空白,因为它接收一个空的address_entry_value.get(),如下图所示。

这导致了

任何帮助都会非常感激,因为我真的很难解决这个问题。

1 个答案:

答案 0 :(得分:0)

您正在创建Tk()的两个实例。这意味着你有两个完全分开的Tcl解释器(有关Bryan Oakley的这个读取this answer的更多信息)。你没有发布足够的代码来准确地看到发生了什么,但我很确定它与尝试从另一个Tcl解释器中访问信息有关。

因此,一般来说,请确保只有Tk()的一个实例。要拥有多个共享相同Tcl解释器的窗口,请将第二个窗口设为Toplevel()窗口。