嗨〜我在python gui中使用tkinter。我的代码是listbox wdiget。我想添加带有列表框小部件的过滤器。 但我不知道什么都不做。我怎么能做到这一点。 我想添加过滤器..我不知道那样做.. 请帮帮我。我不知道make search_data()。
from tkinter import *
def search_data():
print('d')
root=Tk()
dd = Frame(root, borderwidth=0 )
# create the entry widget
entry_value = StringVar()
entry = Entry(dd, textvariable=entry_value)
entry.pack(side=LEFT) # where ever you want it
Button(dd, text = 'search ', command = search_data).pack(side=LEFT)
dd.pack()
scrollbar=Scrollbar(root)
scrollbar.pack(side=RIGHT,fill=Y)
mylist=Listbox(root,yscrollcommand=scrollbar.set, width=100, height=15)
for line in range(100):
mylist.insert(END,"This is line number " + str(line))
mylist.pack(side=LEFT,fill=BOTH)
scrollbar.config(command=mylist.yview)
mainloop()
答案 0 :(得分:0)
要拥有过滤器,您需要在GUI中添加“内容”,以便用户输入过滤器模式。
e.g。我们正在谈论tkinter的Entry
小部件。
伪代码
# do your imports
# create the entry widget
entry_value = StringVar()
entry = Entry(root, textvariable=entry_value)
entry.pack() # where ever you want it
#now add your list box
#add e.g. a button to apply your filter
def filter_data():
# ... iterate over your data, check if your filter applies and decide how to proceed
按钮的:检查文档中的回调和数据结构,看看如何做到这一点。
存储数据:
您正在将项目直接添加到列表中。
mylist.insert(END,"This is line number " + str(line))
这是一种显示数据的方式 - 是的。 这是可维护的代码吗?不是真的。
为了过滤显示的数据,我建议使用一些refresh
函数来访问要显示的存储数据。
如何实现这一目标? 通常应该有某种类型的数组,字典或类似的东西来存储数据。也可以是一个读取和解析数据的文件。
让我根据你的代码给你一个例子:
您有一个虚拟生成器for i in range(0,100):
我想您稍后会根据变量的命名读取文件,但会将其更改为在大多数常见循环中用作索引的常用i
。
在您的代码中,您可以将数据存储在列表中。
raw_data = range(0,100)
actual_data = raw_data # this will be used from now on inside your refresh
def refresh():
# clean your listbox
# iterate over the data
for line in actual_data:
#add it now to the listbox
def filter():
# get your filter pattern first
# we have a string var, so use "get()"
filter_pattern = entry_value.get()
# now create a new list
actual_data = []
# iterate over raw data, check if data matches filter
# if it does, append it to actual_data
# call refresh now
refresh()
是的,我知道该代码示例中缺少很多内容。
为什么? 我故意留下大部分代码。正如Bryan已经提到的那样,SO不是代码编写服务。说实话,我想你没有任何编程经验。让我直截了当,这不是一件坏事,但看起来你做了很多研究。阅读文档,教程,自己尝试一些东西。这将有助于您创建代码,软件等。单独的SO可能有助于某些编程问题,但不能成为程序员。这是一个决定,没有人会强迫你成为。