使用 destroy() 从 Tkinter 中的网格中删除一个条目框
Deleting an Entrybox from grid in Tkinter with destroy()
我在 Tkinter 中有一个树视图,双击 id 列中的一个项目(不是顶层项目),我添加了一个 entry widget
。如果我双击另一个项目,我想删除原来的entry widget
。我正在尝试使用 entry.destroy()
和 try
语句来执行此操作,这样我第一次双击时就不会出错。 destroy()
函数似乎什么都不做。
from Tkinter import *
import ttk
root = Tk()
def OnDoubleClick(event):
try:
entry.destroy()
except:
entry_text = StringVar()
entry = Entry(root, textvariable=entry_text)
entry.configure(background='#d3d3d3')
rowid = tree.identify_row(event.y)
column = tree.identify_column(event.x)
# clicked row parent id
parent = tree.parent(rowid)
# do nothing if item is top-level
if parent == '':
return
#get column position info
x,y,width,height = tree.bbox(rowid, column)
print x,y,width,height
if column == '#0':
entry.place( x=x, y=y+height // 2, anchor=W, width=width)
entry_text.set(tree.set(tree.identify_row(event.y)))
print tree.set(tree.identify_row(event.y))
tree = ttk.Treeview(root)
tree["columns"]=("one","two")
tree.heading("one", text="coulmn A")
tree.heading("two", text="column B")
tree.insert("", 3, "dir3", text="Dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir3', text="sub dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir5', text="sub dir 4",values=("3A"," 3B"))
tree.bind("<Double-1>", OnDoubleClick)
tree.pack()
root.mainloop()
添加一个测试以查看条目是否存在(常见的调试测试),显示条目不存在。 Hint=它与条件 place 语句有关,这也意味着它是函数的本地函数和函数退出时收集的垃圾(永远不会添加到确实保留的根)。
from Tkinter import *
import ttk
root = Tk()
def OnDoubleClick(event):
try:
print "entry =", entry
except:
print "-----entry does not exist-----"
try:
entry.destroy()
except:
entry_text = StringVar()
entry = Entry(root, textvariable=entry_text)
entry.configure(background='#d3d3d3')
rowid = tree.identify_row(event.y)
column = tree.identify_column(event.x)
# clicked row parent id
parent = tree.parent(rowid)
# do nothing if item is top-level
if parent == '':
return
#get column position info
x,y,width,height = tree.bbox(rowid, column)
print x,y,width,height
if column == '#0':
entry.place( x=x, y=y+height // 2, anchor=W, width=width)
entry_text.set(tree.set(tree.identify_row(event.y)))
print tree.set(tree.identify_row(event.y))
tree = ttk.Treeview(root)
tree["columns"]=("one","two")
tree.heading("one", text="coulmn A")
tree.heading("two", text="column B")
tree.insert("", 3, "dir3", text="Dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir3', text="sub dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir5', text="sub dir 4",values=("3A"," 3B"))
tree.bind("<Double-1>", OnDoubleClick)
tree.pack()
root.mainloop()
Python认为entry
是局部变量。因为你试过了,所以你没有看到它给出的错误,类似于 UnboundLocalError: local variable 'entry' referenced before assignment
我在 Tkinter 中有一个树视图,双击 id 列中的一个项目(不是顶层项目),我添加了一个 entry widget
。如果我双击另一个项目,我想删除原来的entry widget
。我正在尝试使用 entry.destroy()
和 try
语句来执行此操作,这样我第一次双击时就不会出错。 destroy()
函数似乎什么都不做。
from Tkinter import *
import ttk
root = Tk()
def OnDoubleClick(event):
try:
entry.destroy()
except:
entry_text = StringVar()
entry = Entry(root, textvariable=entry_text)
entry.configure(background='#d3d3d3')
rowid = tree.identify_row(event.y)
column = tree.identify_column(event.x)
# clicked row parent id
parent = tree.parent(rowid)
# do nothing if item is top-level
if parent == '':
return
#get column position info
x,y,width,height = tree.bbox(rowid, column)
print x,y,width,height
if column == '#0':
entry.place( x=x, y=y+height // 2, anchor=W, width=width)
entry_text.set(tree.set(tree.identify_row(event.y)))
print tree.set(tree.identify_row(event.y))
tree = ttk.Treeview(root)
tree["columns"]=("one","two")
tree.heading("one", text="coulmn A")
tree.heading("two", text="column B")
tree.insert("", 3, "dir3", text="Dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir3', text="sub dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir5', text="sub dir 4",values=("3A"," 3B"))
tree.bind("<Double-1>", OnDoubleClick)
tree.pack()
root.mainloop()
添加一个测试以查看条目是否存在(常见的调试测试),显示条目不存在。 Hint=它与条件 place 语句有关,这也意味着它是函数的本地函数和函数退出时收集的垃圾(永远不会添加到确实保留的根)。
from Tkinter import *
import ttk
root = Tk()
def OnDoubleClick(event):
try:
print "entry =", entry
except:
print "-----entry does not exist-----"
try:
entry.destroy()
except:
entry_text = StringVar()
entry = Entry(root, textvariable=entry_text)
entry.configure(background='#d3d3d3')
rowid = tree.identify_row(event.y)
column = tree.identify_column(event.x)
# clicked row parent id
parent = tree.parent(rowid)
# do nothing if item is top-level
if parent == '':
return
#get column position info
x,y,width,height = tree.bbox(rowid, column)
print x,y,width,height
if column == '#0':
entry.place( x=x, y=y+height // 2, anchor=W, width=width)
entry_text.set(tree.set(tree.identify_row(event.y)))
print tree.set(tree.identify_row(event.y))
tree = ttk.Treeview(root)
tree["columns"]=("one","two")
tree.heading("one", text="coulmn A")
tree.heading("two", text="column B")
tree.insert("", 3, "dir3", text="Dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir3', text="sub dir 3",values=("3A"," 3B"))
tree.insert("dir3", 3, 'subdir5', text="sub dir 4",values=("3A"," 3B"))
tree.bind("<Double-1>", OnDoubleClick)
tree.pack()
root.mainloop()
Python认为entry
是局部变量。因为你试过了,所以你没有看到它给出的错误,类似于 UnboundLocalError: local variable 'entry' referenced before assignment