Я проверил ваш код, и он отлично работает для меня. Но есть два других способа, у которых есть небольшое преимущество перед тем, как вы пытаетесь.
1. По глобализации:
Вы можете глобализировать свою переменную (vn
) и виджет ввода (vn_entry
) внутри функции (call
), поэтому есть больше шансов, что ваша функция легко поймет, какая переменная и виджет Entry для работы.
Как это:
import tkinter as tk
from tkinter import messagebox
def call():
global vn, vn_entry
vn_info = vn.get()
if vn_info == "":
messagebox.showinfo("ok", "test1")
vn_entry.focus_set()
window = tk.Tk()
window.geometry("500x500")
window.title("testfocus")
heading = tk.Label(window, text="focus", bg="grey", fg="black", width="500", height="3")
heading.pack()
vn_text = tk.Label(window, text="Vn")
vn_text.place(x=15, y=70)
vn = tk.StringVar()
vn_entry = tk.Entry(window, textvariable=vn, width="30")
vn_entry.place(x=15, y=90)
bt = tk.Button(window, text="call", width=30, height="2", command=call, bg="green")
bt.place(x=15, y=280)
window.mainloop()
2. Передав аргументы:
Вы можете передать свою переменную (vn
) и Entry Widget (vn_entry
) в функцию (call
) в качестве аргументов, поэтому у вашей функции также больше шансов легко понимает, с какой переменной и виджетом Entry иметь дело.
Как это:
import tkinter as tk
from tkinter import messagebox
def call(var, e):
vn_info = var.get()
if vn_info == "":
messagebox.showinfo("ok", "test1")
e.focus_set()
window = tk.Tk()
window.geometry("500x500")
window.title("testfocus")
heading = tk.Label(window, text="focus", bg="grey", fg="black", width="500", height="3")
heading.pack()
vn_text = tk.Label(window, text="Vn")
vn_text.place(x=15, y=70)
vn = tk.StringVar()
vn_entry = tk.Entry(window, textvariable=vn, width="30")
vn_entry.place(x=15, y=90)
bt = tk.Button(window, text="call", width=30, height="2", command=lambda: call(vn, vn_entry), bg="green")
bt.place(x=15, y=280)
window.mainloop()
Примечание:
- Вы
import
ing *
от tkinter
, тогда как *
import
s не рекомендуется. Вы должны import tkinter as tk
или as
все, что вы хотите. - Вы не передаете окно (
Tk()
) некоторым из ваших виджетов, что не является хорошей практикой. - Создание эти улучшения вашего уже существующего кода также могут вам помочь.