如何在Python Tkinter窗口中显示搜索结果

时间:2015-01-19 18:33:22

标签: python search button tkinter

我不确定是否已经问过这个问题,但我环顾四周并没有发现任何与我的问题有关的问题。我正在尝试构建一个应用程序,通过ext(.txt,.mkv,.mp3)搜索特定文件的所有目录和子目录,大多数这些扩展将被使用(如果它很重要)我希望程序显示在文本区域(排序的文本字段)中显示文件名和路径的结果。

我有一个我正在使用的脚本,但我不确定这是否是最好的方法。所以我的问题是如何将现有脚本绑定到按钮小部件。我认为?还有更多。再次学习。

如果有更简单的方法(更少的步骤=更清洁的代码),请#34;告诉我代码"文档总是很有帮助,但是"实际操作"方法最适合我。我现在还在学习Python和Tkinter。这不是完整的代码。我已经删除了一些对我不起作用的东西,所以非常不完整。

from tkinter import *
from tkinter import ttk
import os

Root = Tk()

def help!
for dirname, dirnames, filenames in os.walk('/'):
       for i in glob.glob(dirname+'/'+search+'*')
           print (i)
This part writen for python 2.7 now being writen in 3.x

entry = ttk.Entry(root, text = 'Enter file name')
entry.pack()

button = ttk.Button(root, text = 'Search')
button.pack()

# Text field of sort goes here!

提前致谢

更新: 完整的代码。 Python 3x(应该是)

from tkinter import *
from tkinter import ttk
from sys import argv
import glob
import os

search_input = argv
#code in question
def find_files():
    for dirname, dirnames, filenames in os.walk('/home'):
        for i in glob.glob('/*'+searchinput):
            listbox.insert(END, search_input)

#Code in question

main = Tk()
main.title("FSX")
main.geometry('640x480')

frame1 = ttk.Frame(main, height=200, width=400)
frame1.pack()

entry = Entry(frame1, width=30)
entry.pack()

button1 = ttk.Button(frame1, text="Search", command=find_files)
button1.pack()
button1.bind ('<ButtonPress>', lambda e: progressbar.start())

button2 = ttk.Button(frame1, text="Quit")
button2.pack()
button2.bind ('<ButtonPress>', lambda e: exit())

progressbar = ttk.Progressbar(frame1, orient = HORIZONTAL, length = 200,      mode = 'indeterminate')
progressbar.pack()
#progressbar.start()

frame2 = ttk.Frame(main, height=200, width=400)
frame2.pack()

listbox = Listbox(frame2, height=200, width=400)
listbox.pack(fill=BOTH, expand=YES)

progressbar.stop()

main.mainloop()

这是完整的代码。不要介意进度条问题。

2 个答案:

答案 0 :(得分:0)

labl = Label(text="{}".format(Result goes here))
labl.pack()

您可以像这样显示结果。检查pack()参数以设计标签。我们在这里做的很简单,text函数的Label参数正在使用format()函数获取特定数据。

如果您的结果来自某个功能,那么您必须将其放入您的功能中。例如;

def fnk():
    a=range(1,100)
    lst1=[]
    for t in range(6):
        while len(lst1)<6:
            x=random.choice(a)
            if str(x) not in lst1:
                lst1.append(str(x))
    labl = Label(text="{}".format(" ".join(lst1)), fg="red",font="Times 35 bold")
    labl.pack()

bttn = Button(text="Start", command = fnk)
bttn.pack(side=LEFT)

就像这样的程序,每当您点击Start按钮时,屏幕上会看到不同的六个数字(1,100)。最好将结果放在列表中,并将它们放在上面的format()示例中。

答案 1 :(得分:0)

我修改了您的示例,以便在listbox中显示找到的文件。在这个例子中,我用于/ tmp文件夹中的日志文件。找到的文件保存在found_files列表中,然后显示在列表框中。

from tkinter import *
from tkinter import ttk
import glob
import os

search = '*log'


found_files = []

for dirname, dirnames, filenames in os.walk('/tmp'):
    for i in glob.glob(dirname+'/'+search+'*'):
        print(i)
        found_files.append(i)



root = Tk()
root.geometry( "640x480" );


listbox = Listbox(root)

for a_file in found_files:
    listbox.insert(END, a_file)

listbox.pack(fill=BOTH, expand=YES)

root.mainloop()

enter image description here