如何在tkiter中添加过滤器小部件?

时间:2016-04-18 09:54:02

标签: python python-3.x tkinter

嗨〜我在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()

1 个答案:

答案 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

按钮的

:检查文档中的回调和数据结构,看看如何做到这一点。

编辑1

存储数据:

您正在将项目直接添加到列表中。

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可能有助于某些编程问题,但不能成为程序员。这是一个决定,没有人会强迫你成为。