python виджет входа и метод get - PullRequest
0 голосов
/ 07 января 2020

Есть ли способ поместить 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 голосов
/ 07 января 2020

Есть ли способ поместить textvariable в другую переменную и не нужно использовать ".get ()"?

Нет, нет. Переменные Tkinter - это объекты, а не значения. В любое время, когда вы хотите использовать значение из переменной tkinter (StringVar, IntVar, et c), вы должны вызывать метод get.

0 голосов
/ 07 января 2020

Проблема не в .get(), а в том, как работают все графические интерфейсы.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...