我正在为一个病人的名单做一个简单的图形用户界面,用tkinter和treeview,我有一个条目,用户应该输入病人的名字,想法是如果病人的名字在列表中,包含病人名字的一行(或多行)被突出显示(选中)。或者另一个选项可以在“所有患者”的列表框中,仅显示包含我们搜索的患者姓名的条目。在
我以前没有使用过treeview,也找不到关于它的函数和示例的太多数据,所以我正在为选择/突出显示部分而努力,在这一点上,任何想法都会有帮助。。。。在
到目前为止,我的代码是:
import tkinter
from tkinter import ttk
class MainPage:
def __init__(self,master):
self.master = master
self.frame = tkinter.Frame(self.master)
self.master.columnconfigure(0, weight=1)
self.master.columnconfigure(1, weight=3)
self.master.columnconfigure(2, weight=1)
self.master.columnconfigure(3, weight=1)
self.master.columnconfigure(4, weight=1)
self.searchfield = tkinter.Frame(self.master)
self.searchfield.grid(row=1, column=0, columnspan=4)
self.search_var = tkinter.StringVar()
self.search_var.trace("w", lambda name, index, mode: self.selected)
self.entry = tkinter.Entry(self.searchfield,
textvariable=self.search_var, width=45)
self.entry.grid(row=0, column=0, padx=10, pady=3)
self.searchbtn = tkinter.Button(self.searchfield, text='Search',
command=self.selected)
self.searchbtn.grid(row=0, column=1)
self.treeFrame = tkinter.Listbox(self.searchfield, width=45, height=45)
self.treeFrame.grid(row=1, column=0, padx=10, pady=3)
self.tree = ttk.Treeview( self.treeFrame, columns=('Name', 'Date'))
self.tree.heading('#0', text='ID')
self.tree.heading('#1', text='Name')
self.tree.heading('#2', text='Date')
self.tree.column('#1', stretch=tkinter.YES)
self.tree.column('#2', stretch=tkinter.YES)
self.tree.column('#0', stretch=tkinter.YES)
self.tree.grid(row=4, columnspan=4, sticky='nsew')
self.treeview = self.tree
self.i = 1
self.patient_list = [{"Name": "Jane", "Date": "05.09.2017"},
{"Name": "David", "Date": "04.09.2017"},
{"Name": "Patrick", "Date": "03.09.2017"}]
for p in self.patient_list:
self.tree.insert('', 'end', text="ID_"+str(self.i), values=
(p["Name"], p["Date"]))
self.i = self.i + 1
self.search_item = self.entry.get()
for p in self.patient_list:
if p["Name"] == self.search_item:
self.selected(self.search_item)
def selected(self):
currentItem = self.tree.focus()
print(self.tree.item(currentItem)['values'])
root=tkinter.Tk()
d=MainPage(root)
root.mainloop()
提前谢谢!在
某种搜索已经从盒子里实现了,所以没有必要再做一个了!在
你需要做的就是给你的病人提供正确的标签。之后,您可以通过这些标记进行搜索(是的,您可以为指定的患者提供多个标记)并控制患者的外观/高亮显示(树视图行)。在
我们来玩玩:
现在这只是突出一个病人。。。 ... 但您可以使用
.detach()
和.move()
对其进行修改,以对整个treeview进行排序。在此外,您还可以使用几行代码实现部分搜索:
^{pr2}$总之,没有必要重新设计轮子,但是如果你的treeview是可变的,请记住这些标记必须与可变内容同步。在
有关treeview的更多信息可以在here找到。在
请参阅下面我的解释片段:
因此,每次更新
entry
小部件时,我们会循环查看名称列表,并检查entry
小部件的值是否与names
list
中的element
的值匹配,直到entry
小部件的值的长度(例如,如果我们输入一个五个字符长的字符串,那么我们将检查元素的前五个字符)。在如果它们匹配,那么我们将树条目的
id
附加到list
上。在检查完所有名称后,我们将匹配的
list
传递到id
中,然后突出显示所有匹配的树条目。在相关问题 更多 >
编程相关推荐