有什么方法可以将textvariable放入另一个变量中,而不必使用“ .get()”吗?我已经做了很多筛选研究的教程和文章,因为我意识到这是一个很小的问题,但是我可能误解了一些非常关键的内容,因此我希望有人可以帮助我为条目小部件和.get创造一些直觉。 ()方法。
下面是我一直在研究的脚本的一部分,我希望将输入框中输入的文本用于以后使用。如果使用search_word.get()
,我可以使用它,但是我不为什么不能做类似New_variable=search_word.get()
的事情,所以从那时起,我只能使用“ New_variable”。
import tkinter as tk
from tkinter import *
from tkinter import ttk
Text_input_window = Tk()
Text_input_window.geometry('600x350+100+200')
Text_input_window.title("Test")
label_1=ttk.Label(Text_input_window, text="Enter word to search:", background="black", foreground="white")
label_1.grid(row=1, column=0, sticky=W)
search_word=StringVar()
entry_1=ttk.Entry(Text_input_window,textvariable=search_word, width=40, background="white")
entry_1.grid(row=2, column=0, sticky=W)
New_variable=StringVar()
New_variable=search_word.get()
def click():
print(New_variable)
print(search_word.get())
Text_input_window.destroy()
btn_1=ttk.Button(Text_input_window, text="submit", width=10, command=click)
btn_1.grid(row=3, column=0, sticky=W)
Text_input_window.mainloop()
答案 0 :(得分:0)
问题不是.get()
,而是所有GUI的工作方式。
mainloop()
启动程序,因此new_variable = search_word.get()
在您还没有看到窗口之前就已执行-因此它会尝试在将文本放入Entry
中之前获取文本。
您必须在click()
内执行此操作,然后在输入文本并单击按钮后执行。
import tkinter as tk
# --- functions ---
def click():
global new_variable # inform function to use external/global variable instead of creating local one
#new_variable = entry.get() # you can get it directly from `Entry` without StringVar()
new_variable = search_word.get()
root.destroy()
# --- main ---
new_variable = '' # create global variable with default value
root = tk.Tk()
search_word = tk.StringVar()
entry = tk.Entry(root, textvariable=search_word)
entry.pack()
btn = tk.Button(root, text="submit", command=click)
btn.pack()
root.mainloop() # start program
# --- after closing window ---
print('new_variable:', new_variable)
print('search_word:', search_word.get()) # it seems it still exists
# print('entry:', entry.get()) # `Entry` doesn't exists after closing window so it gives error
答案 1 :(得分:0)
有什么方法可以将textvariable放入另一个变量中,而不必使用“ .get()”吗?
不,没有。 Tkinter变量是对象,而不是值。每当您想使用tkinter变量中的值(StringVar
,IntVar
等)时,都必须调用get
方法。