首页 > 解决方案 > python入口小部件和get方法

问题描述

有没有办法将文本变量放在另一个变量中而不必使用“.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()

标签: pythontkintergettkinter-entry

解决方案


问题不.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

推荐阅读