【做一个简单的文件搜索项目】

一、geometry()函数的用法:

通过geometry('wxh±x±y')进行设置。w为宽度,h为高度。 +×表示距屏幕左边的距离;-×表示距屏幕右边的距离;+y 表示距屏幕上边的距离;-y表示距屏幕下边的距离。

import tkinter as tk  #桌面应用程序开发 tkinter库

root = tk.Tk()  #创建窗口
root.title('搜索工具')  #显示标题
root.geometry('600x300')  #设置窗体大小 (注意不是乘号 * )
# root.geometry('600x300+200+300')
root.mainloop() #显示窗口

二、设置窗口的:标签、输入框、按钮和列表

#标签Label和输入框Entry      pack()布局到页面
tk.Label(root,text='关键字:').pack()
tk.Entry(root).pack()
tk.Label(root,text='文件类型:').pack()
tk.Entry(root).pack()

#按钮Button   pack()布局到页面
tk.Button(root,text='搜索').pack()

#列表   pack()布局到页面
tk.Listbox(root).pack()

注意:默认显示是从上到下(针对整个窗体root);


调整目的:1、将标签、输入框、按钮  调整在同一行(从左到右);search_frame组件下面的归为是一个整体(组)。2、列表适应窗口大小

#从左到右布局
search_frame=tk.Frame()   #布局组件
search_frame.pack()
tk.Label(search_frame,text='关键字:').pack(side='left')   #side位置
tk.Entry(search_frame).pack(side='left')
tk.Label(search_frame,text='文件类型:').pack(side='left')
tk.Entry(search_frame).pack(side=tk.LEFT)    #或者使用side=tk.LEFT


tk.Button(search_frame,text='搜索').pack(side='left')

#从上到下布局
tk.Listbox(root).pack(fill=tk.BOTH,expand=True)  #铺满窗口

效果如图:

python 获取桌面云名称 python操作桌面软件_后端

三、搭建框架

目的:点击按钮,获取两个输入框的内容; get()获取

#padx=10,pady=10 分别设置x和y方向的边框 (更美观)
tk.Label(search_frame,text='关键字:').pack(side='left',padx=10,pady=10)   #side位置
search_key=tk.Entry(search_frame)  #创建对象,以便后面调用
search_key.pack(side='left',padx=10,pady=10)
tk.Label(search_frame,text='文件类型:').pack(side='left',padx=10,pady=10)
search_type=tk.Entry(search_frame) #创建对象,以便后面调用
search_type.pack(side='left',padx=10,pady=10)

#按钮(创建对象,以便后面调用)
search_button=tk.Button(search_frame,text='搜索')
search_button.pack(side='left',padx=10,pady=10)

def search_get():
    print('点击了一下按钮',search_key.get(),search_type.get())

#点击按钮,获取输入框Entry的内容,调用文件管理器搜索文件
search_button.config(command=search_get)   #按钮点击事件

完善自定义的search_get()函数:对关键字和类型文件进行判断,检索到我们需要的文件;

def search_get():
    _key=search_key.get()
    _type=search_type.get()
    print('按钮被点击了')
    #没输入内容,弹窗提示错误
    if not _key :
        messagebox.showinfo('出错提醒','请输入关键字!')
    elif not _type :
        messagebox.showinfo('出错提醒','请输入文件类型!')
    else:
        fn=filedialog.askdirectory()  #获取文件夹目录
        # print(fn)
        fn_list=os.walk(fn)           #遍历文件夹目录的所有文件
        for root_path,dirs,files in fn_list:  #获取根目录、次级目录、所有文件列表
            # print(root_path,dirs,files )
            for file in files:                 #遍历所有文件
                if file.endswith(_type):       #指定类型的文件如果存在则返回True
                    if _key in file:           #判断搜索的关键字是否存在文件
                        # print(root_path+'\\'+ file)
                        lst_box.insert(tk.END,root_path+'\\'+ file)  #加入到列表中显示

目的:双击列表后显示文件的内容

def lst_box_click(event):
    # print('列表盒子被点击了')
    #获取被选中的内容
    index = lst_box.curselection()[0]
    path=lst_box.get(index)   #获取文件路径
     #显示到新的窗口
    top = tk.Toplevel()
    top.title('查看内容')
    content = open(path,mode='r',encoding='utf-8').read()
    text=tk.Text(top)
    text.pack()
    text.insert(tk.END,content)

完整代码:

import tkinter as tk  #桌面应用程序开发 tkinter库
from tkinter import messagebox,filedialog  #弹窗和文件框
import os #文件操作

root = tk.Tk()  #创建窗口
root.title('搜索工具')  #显示标题
root.geometry('600x300')  #设置窗体大小 (注意不是乘号 * )

#从左到右布局
search_frame=tk.Frame()   #布局组件
search_frame.pack()

#padx=10,pady=10 分别设置x和y方向的边框 (更美观)
tk.Label(search_frame,text='关键字:').pack(side='left',padx=10,pady=10)   #side位置
search_key=tk.Entry(search_frame)  #创建对象,以便后面调用
search_key.pack(side='left',padx=10,pady=10)
tk.Label(search_frame,text='文件类型:').pack(side='left',padx=10,pady=10)
search_type=tk.Entry(search_frame) #创建对象,以便后面调用
search_type.pack(side='left',padx=10,pady=10)

#按钮(创建对象,以便后面调用)
search_button=tk.Button(search_frame,text='搜索')
search_button.pack(side='left',padx=10,pady=10)

#从上到下布局
lst_box = tk.Listbox(root)

#创建滚动窗口并布局到页面上
sb = tk.Scrollbar(root)
sb.pack(side=tk.RIGHT,fill=tk.Y)
lst_box.config(yscrollcommand=sb.set)
sb.config(command=lst_box.yview)

lst_box.pack(fill=tk.BOTH,expand=True)  #铺满窗口


def search_get():
    _key=search_key.get()
    _type=search_type.get()
    # print('按钮被点击了')
    #没输入内容,弹窗提示错误
    if not _key :
        messagebox.showinfo('出错提醒','请输入关键字!')
    elif not _type :
        messagebox.showinfo('出错提醒','请输入文件类型!')
    else:
        fn=filedialog.askdirectory()  #获取文件夹目录
        # print(fn)
        fn_list=os.walk(fn)           #遍历文件夹目录的所有文件
        for root_path,dirs,files in fn_list:  #获取根目录、次级目录、所有文件列表
            # print(root_path,dirs,files )
            for file in files:                 #遍历所有文件
                if file.endswith(_type):       #指定类型的文件如果存在则返回True
                    if _key in file:           #判断搜索的关键字是否存在文件
                        # print(root_path+'\\'+ file)
                        lst_box.insert(tk.END,root_path+'\\'+ file)  #加入到列表中显示


#点击按钮,获取输入框Entry的内容,调用文件管理器搜索文件
search_button.config(command=search_get)   #按钮点击事件


def lst_box_click(event):
    # print('列表盒子被点击了')
    #获取被选中的内容
    index = lst_box.curselection()[0]
    path=lst_box.get(index)   #获取文件路径
     #显示到新的窗口
    top = tk.Toplevel()
    top.title('查看内容')
    content = open(path,mode='r',encoding='utf-8').read()
    text=tk.Text(top)
    text.pack()
    text.insert(tk.END,content)


#当列表盒子被双击时,弹出新的窗口
lst_box.bind('<Double-Button-1>',lst_box_click)


root.mainloop() #显示窗口

补充:tkinter控件

python 获取桌面云名称 python操作桌面软件_python_02

 Tkinter 公开的几何管理类:包、网格、位置。

python 获取桌面云名称 python操作桌面软件_后端_03


Lable控件标签控件

python 获取桌面云名称 python操作桌面软件_ide_04

 


Button控件  

用法如下:Entry(根对象, [属性列表]),即Entry(root, option...) 

python 获取桌面云名称 python操作桌面软件_ide_05


Checkbutton控件Checkbutton 是复选框,又称为多选按钮,可以表示两种状态。用法为: Checkbutton( root, option, ... ), 其中可选属性 option 有很多,如下表所示:

python 获取桌面云名称 python操作桌面软件_python 获取桌面云名称_06

 以下是这个小工具的常用方法:

python 获取桌面云名称 python操作桌面软件_开发语言_07


Radiobutton控件

单选按钮是一种可在多个预先定义的选项中选择出一项的 Tkinter 控件 

python 获取桌面云名称 python操作桌面软件_ide_08


Menu控件

Menu被用来创建一个菜单  Menu(root,option,…)

python 获取桌面云名称 python操作桌面软件_后端_09

特有函数如下:

python 获取桌面云名称 python操作桌面软件_python_10


 Message控件

Message 控件用来展示一些文字短消息

python 获取桌面云名称 python操作桌面软件_python_11