python条目小部件并获取方法

时间:2020-01-07 12:12:57

标签: python tkinter get tkinter-entry

有什么方法可以将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()

2 个答案:

答案 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变量中的值(StringVarIntVar等)时,都必须调用get方法。