添加另一个标签时如何删除 1 个标签 - python tkinter
How to delete 1 label when adding another - python tkinter
python 相当陌生。
我正在使用选项菜单,并且在它们上面贴有标签:
from tkinter import *
root=Tk()
def f(s):
if s=="btn":
one=Label(root,text="one blah blah")
one.grid(column=1,row=2)
if s=="btn2":
two=Label(root,text="two")
two.grid(column=1,row=2)
v=StringVar(root)
v.set("f")
a=OptionMenu(root,v,"btn","btn2",command=f)
a.grid(column=1,row=1)
root.configure()
root.geometry("100x100")
root.mainloop()
我不知道如何让 "one blah blah" 删除 "two" 以便在按 btn1 后按 btn2 时它不可见。我试过 .grid_forget 和类似的东西,但我永远无法让它工作。
如果重要的话,这是我正在创建的一个更大程序的示例程序,其中有许多不同的选项菜单和标签。
您可以在开始时创建空标签,稍后仅更改此标签中的文本
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)
尝试修改
one=Label(root,text="one blah blah",width=20)
和
two=Label(root,text="two",width=20)
或者放一个合适的宽度。会好的。
代码如下所示:
from tkinter import *
root=Tk()
def f(s):
if s=="btn":
one=Label(root,text="one blah blah",width=20)
one.grid(column=1,row=2)
if s=="btn2":
two=Label(root,text="two",width=20)
two.grid(column=1,row=2)
v=StringVar(root)
v.set("f")
a=OptionMenu(root,v,"btn","btn2",command=f)
a.grid(column=1,row=1)
root.configure()
root.geometry("100x100")
root.mainloop()
一个blah blah会被完全擦除,两个会被写入。
python 相当陌生。 我正在使用选项菜单,并且在它们上面贴有标签:
from tkinter import *
root=Tk()
def f(s):
if s=="btn":
one=Label(root,text="one blah blah")
one.grid(column=1,row=2)
if s=="btn2":
two=Label(root,text="two")
two.grid(column=1,row=2)
v=StringVar(root)
v.set("f")
a=OptionMenu(root,v,"btn","btn2",command=f)
a.grid(column=1,row=1)
root.configure()
root.geometry("100x100")
root.mainloop()
我不知道如何让 "one blah blah" 删除 "two" 以便在按 btn1 后按 btn2 时它不可见。我试过 .grid_forget 和类似的东西,但我永远无法让它工作。
如果重要的话,这是我正在创建的一个更大程序的示例程序,其中有许多不同的选项菜单和标签。
您可以在开始时创建空标签,稍后仅更改此标签中的文本
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)
尝试修改
one=Label(root,text="one blah blah",width=20)
和
two=Label(root,text="two",width=20)
或者放一个合适的宽度。会好的。
代码如下所示:
from tkinter import *
root=Tk()
def f(s):
if s=="btn":
one=Label(root,text="one blah blah",width=20)
one.grid(column=1,row=2)
if s=="btn2":
two=Label(root,text="two",width=20)
two.grid(column=1,row=2)
v=StringVar(root)
v.set("f")
a=OptionMenu(root,v,"btn","btn2",command=f)
a.grid(column=1,row=1)
root.configure()
root.geometry("100x100")
root.mainloop()
一个blah blah会被完全擦除,两个会被写入。