我正在设置一个临时的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(),如下图所示。
这导致了
任何帮助都会非常感激,因为我真的很难解决这个问题。
答案 0 :(得分:0)
您正在创建Tk()
的两个实例。这意味着你有两个完全分开的Tcl解释器(有关Bryan Oakley的这个读取this answer的更多信息)。你没有发布足够的代码来准确地看到发生了什么,但我很确定它与尝试从另一个Tcl解释器中访问信息有关。
因此,一般来说,请确保只有Tk()
的一个实例。要拥有多个共享相同Tcl解释器的窗口,请将第二个窗口设为Toplevel()
窗口。