python-3.x - 无法销毁由 tkinter 中的函数创建的小部件
问题描述
from tkinter import *
import tkinter as tk
root = Tk()
root.geometry("500x500")
var1 = StringVar()
def create():
twoLabel = Label(root,text="meh",)
twoLabel.place(x=20,y=300)
threeTextEntry = Entry(root, textvariable=var1)
threeTextEntry.place(x=20,y=400)
def destroy():
twoLabel.destroy()
threeTextEntry.destroy()
zeroButton = tk.Button(root, text="create", width=8, fg="black", bg="gold", command=create)
zeroButton.place(x=20,y=100)
oneButton = tk.Button(root, text="destroy", width=8, fg="black", bg="gold", command=destroy)
oneButton.place(x=20,y=200)
twoLabel = Label(root,text="meh",)
twoLabel.place(x=20,y=300)
threeTextEntry = Entry(root, textvariable=var1)
threeTextEntry.place(x=20,y=400)
小部件已创建,我可以先用小部件销毁它们,然后重新创建它们。但是在函数重新创建小部件后,我无法再破坏它们。我在这里做错了什么?抱歉,我是 tkinter 的新手-谢谢。
解决方案
您需要定义变量twoLabel
和threeTextEntry
as globals
,因为当您在函数中创建这些变量时,它们是local variables
并且您无法从其他函数中访问它们。
from tkinter import *
import tkinter as tk
root = Tk()
root.geometry("500x500")
var1 = StringVar()
def create():
global twoLabel
global threeTextEntry
twoLabel = Label(root,text="meh",)
twoLabel.place(x=20,y=300)
threeTextEntry = Entry(root, textvariable=var1)
threeTextEntry.place(x=20,y=400)
def destroy():
twoLabel.destroy()
threeTextEntry.destroy()
zeroButton = tk.Button(root, text="create", width=8, fg="black", bg="gold", command=create)
zeroButton.place(x=20,y=100)
oneButton = tk.Button(root, text="destroy", width=8, fg="black", bg="gold", command=destroy)
oneButton.place(x=20,y=200)
global twoLabel
global threeTextEntry
twoLabel = Label(root,text="meh",)
twoLabel.place(x=20,y=300)
threeTextEntry = Entry(root, textvariable=var1)
threeTextEntry.place(x=20,y=400)
root.mainloop()
推荐阅读
- mysql - 插入到mysql中的地理空间字段
- typescript - 如何使用打字稿向对象添加方法
- postgresql - Drupal 与 docker 中的 postgres 引发错误“关系“cache_discovery”不存在”
- python - Seaborn 和 matplotlib 控制子图中的图例
- android-source - 什么是 Android mini_emulator 镜像?
- python - 如何使用 python anytree 获取所有可能的分支
- image-segmentation - 使用 DL4J 进行语义分割的测试问题
- java - JavaFX:操作系统停靠栏中的程序标题(例如 Ubuntu 19.10)
- wpf - 为什么在我的数据网格中看不到绑定的价值
- sql - 如何合并两个具有相同键且具有相同值的对象数组,并且不同的值将存储在一个数组中?