我如何在 Python Tkinter window 中显示搜索结果

how do i display search results in Python Tkinter window

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

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

如果有更简单的方法(更少的步骤 = 更清晰的代码)请 "show me the code" 文档总是有帮助的,但 "hands on" 方法最适合我。我现在还在学习 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()

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

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

您可以像这样显示您的结果。检查 pack() 参数以设计您的标签。我们在这里做的很简单,Label函数的text参数是用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() 示例中。

我修改了您的示例以在 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()