Вы можете создать пустой ярлык при запуске, а затем изменить только текст в ярлыке
import tkinter as tk
# --- functions ---
def f(s):
if s == "btn":
l['text'] = "one blah blah"
elif s == "btn2":
l['text'] = "two"
else:
print('ERROR: unknow:', s)
# --- main ---
root = tk.Tk()
root.geometry("100x100")
v = tk.StringVar(value="f")
a = tk.OptionMenu(root, v, "btn", "btn2", command=f)
a.grid(column=1, row=1)
l = tk.Label(root)
l.grid(column=1, row=2)
root.mainloop()
Если вы должны удалить Label
(потому что вы должны поставить другой виджет - т. Е Button
), затем используйте destroy()
import tkinter as tk
# --- functions ---
def f(s):
global w # inform function to use external variable when you will use `=`
if s == "label":
if w: # check if widget already exist
w.destroy()
w = tk.Label(root, text="Hello World!")
w.grid(column=1, row=2)
elif s == "button":
if w: # check if widget already exist
w.destroy()
w = tk.Button(root, text="Click Me")
w.grid(column=1, row=2)
else:
print('ERROR: unknow:', s)
# --- main ---
root = tk.Tk()
root.geometry("100x100")
v = tk.StringVar(value="f")
a = tk.OptionMenu(root, v, "label", "button", command=f)
a.grid(column=1, row=1)
w = None # create global variable without value
# to use later with widget (and keep access to this widget)
root.mainloop()
КСТАТИ: вы можете создать виджеты только один раз и заменить их - использовать grid_forget()
скрыть виджет
import tkinter as tk
# --- functions ---
def f(s):
global w # inform function to use external variable when you will use `=`
if s == "label":
if w: # check if widget already exist
w.grid_forget()
w = l
w.grid(column=1, row=2)
elif s == "button":
if w: # check if widget already exist
w.grid_forget()
w = b
w.grid(column=1, row=2)
else:
print('ERROR: unknow:', s)
# --- main ---
root = tk.Tk()
root.geometry("100x100")
v = tk.StringVar(value="f")
a = tk.OptionMenu(root, v, "label", "button", command=f)
a.grid(column=1, row=1)
# create but not display
l = tk.Label(root, text="Hello World!")
b = tk.Button(root, text="Click Me")
w = None # create global variable without value
# to use later with widget (and keep access to this widget)
root.mainloop()
Функция может быть короче, если вы проверить все возможные значения для s
def f(s):
global w # inform function to use external variable when you will use `=`
if w: # check if widget already exist
w.grid_forget()
if s == "label":
w = l
elif s == "button":
w = b
w.grid(column=1, row=2)
Что бы вы ни пытались, вероятно, дал вам сообщение об ошибке. Это сообщение об ошибке сообщает вам, в чем проблема. Покажите нам, что вы пробовали, и какова ошибка. –
при запуске создайте пустую метку, а затем вы можете изменить текст на этом ярлыке - вам не нужно удалять ярлык. – furas