1 回答
TA贡献1773条经验 获得超3个赞
变量names
未定义。您应该在代码的开头放置与以下行类似的行:
names = []
另一方面,您必须如下声明命令函数才能使其工作,因为跟踪回调需要至少三个参数:
def command(*args):
顺便说一句,如果您不想丢失 variable 中的数据names
,我会以面向类的方式转换您的代码,例如以下代码:
from tkinter import *
from tkinter import ttk
root = Tk()
sv = StringVar()
ids = []
class Tree():
def __init__(self, root):
self.names = []
sv.trace("w", self.command)
self.entry = Entry(root, textvariable=sv, width=13)
self.entry.grid(row=2,column=1,rowspan=3,sticky=W)
self.e0 = Entry(root,width=15)
self.e0.grid(row=0,column=1,rowspan=1,sticky=W)
self.e1 = Entry(root,width=15)
self.e1.grid(row=0,column=1,rowspan=2,sticky=W)
self.e2 = Entry(root,width=15)
self.e2.grid(row=0,column=1,rowspan=3,sticky=W)
self.e3 = Entry(root,width=15)
self.e3.grid(row=0,column=1,rowspan=4,sticky=W)
self.btn1 = Button(root,text="add",width=5,command=self.add)
self.btn1.grid(row =0,column=0,rowspan=5)
self.lb1 = Label(root,text="serial num:")
self.lb1.grid(row =0,column=0,rowspan=1)
self.lb2 = Label(root,text="medicine\nname ")
self.lb2.grid(row =0,column=0,rowspan=2)
self.lb3 = Label(root,text="quatity")
self.lb3.grid(row =0,column=0,rowspan=3)
self.lb4 = Label(root,text="expiry Date")
self.lb4.grid(row =0,column=0,rowspan=4)
self.lb4 = Label(root,text="search box")
self.lb4.grid(row =1,column=0,rowspan=6)
#treeview
self.tree = ttk.Treeview(root,height=25)
self.tree["columns"]=("one","two","three","four")
self.tree.column("one",width=120)
self.tree.column("two",width=160)
self.tree.column("three",width=130)
self.tree.column("four",width=160)
self.tree.heading("one", text="Numer seryjny leku")
self.tree.heading("two", text="Nazwa Leku")
self.tree.heading("three", text="Ampułki/Tabletki")
self.tree.heading("four",text="Data ważności")
self.tree["show"]="headings"
self.tree.grid(row=0,column=2,rowspan=6,pady=20)
def add(self):
self.names = self.tree.insert("",END,values=(self.e0.get(),self.e1.get(),self.e2.get(),self.e3.get()))
for i in range(len(self.names)):
ids.append(self.tree.insert("", "end", text=self.names[i]))
def command(self, *args):
selections = []
for i in range(len(self.names)):
if self.entry.get() != "" and self.entry.get() == self.names[i][:len(self.entry.get())]:
selections.append(ids[i])
self.tree.selection_set(selections)
tree = Tree(root)
root.geometry("840x580")
root.mainloop()
添加回答
举报