图形化编程:利用tkinter做一个简单的UI界面实现数据搜索,切换list table text 类型 文件转化

该博客展示了一个使用Tkinter和ttk库构建的图形化界面应用,用户可以输入搜索关键词,并从预设的数据源中选择显示方式(列表、文本或表格)。核心代码包括输入框、下拉菜单以及搜索按钮,实现搜索数据并使用不同视图显示结果。应用中,`BigDataFind`类负责读取文件并根据用户选择的数据展示方式进行数据查找和显示。
摘要由CSDN通过智能技术生成

 核心代码,调度各个类之间的使用

 

import tkinter
from  tkinter  import ttk
import 图形化编程.BigDataFind

class InputView:
    def __init__(self):
        self.win=tkinter.Tk()
        self.win.geometry("800x600+300+0")  # 800宽度,800高度,x,y坐标,左上角
        self.entry = tkinter.Entry(self.win)  # input
        self.entry.place(x=0, y=0)
        self.button = tkinter.Button(self.win, text="搜索", command=self.search)
        self.button.place(x=200, y=0)

        self.comvalue = tkinter.StrivngVar()  # 窗体自带的文本,新建一个值?
        self.comboxlist = ttk.Combobox(self.win, textvariable=self.comvalue,width=80)  # 初始化

        self.comboxlist["values"] = ("listshow", "textshow", "tableshow")
        self.comboxlist.current(0)  # 选择第一个
        self.comboxlist.bind("<<ComboboxSelected>>", self.go)  # 绑定事件
        self.comboxlist.place(x=0,y=50)
        self.howtoshow="listshow"

        self.comvaluefile = tkinter.StringVar()  # 窗体自带的文本,新建一个值
        self.comboxlistfile = ttk.Combobox(self.win, textvariable=self.comvaluefile,width=80)  # 初始化
        self.comboxlistfile["values"] = (r"D:\数据处理\csdn.txt",
                                         r"D:\数据处理\kaifangX.txt",
                                         r"D:\数据处理\nasa.txt")
        self.comboxlistfile.current(0)  # 选择第一个
        self.comboxlistfile.bind("<<ComboboxSelected>>", self.filego)  # 绑定事件
        self.comboxlistfile.place(x=0, y=100)
        self.howtoshowfile = r"D:\数据处理\csdn.txt"

        pass
    def go(self,*args):
        self.howtoshow =self.comboxlist.get() #保存选中的值
        print(self.comboxlist.get())  # 选中当前的值

    def filego(self, *args):
        self.howtoshowfile= self.comboxlistfile.get()  # 保存选中的值
        print(self.comboxlistfile.get())  # 选中当前的值

    def show(self):
        self.win.mainloop()
        pass
    
    def search(self):
        print("start search",self.entry.get())
        big = 图形化编程.BigDataFind.bigdatafind(self.howtoshowfile, self.howtoshow)
        big.find(self.entry.get())
        big.show()

inputs=InputView()
inputs.show()

搜索数据代码:

import codecs #编码解码
import 图形化编程.ListShow
import  图形化编程.TableShow
import  图形化编程.TextShow
class bigdatafind:
    def __init__(self,path,howtoshow):
        self.file=codecs.open(path,"rb","GBK","ignore")#打开文件
        self.howtoshow=howtoshow
        self.showview=None  #窗体-创建
        if  self.howtoshow=="listshow":
            self.showview=图形化编程.ListShow.Listshowdata()
        elif  self.howtoshow=="textshow":
            self.showview = 图形化编程.TextShow.Textshowdata()
        else:
            self.showview=图形化编程.TableShow.Tableshowdata()


    def find(self,searchstr):
        while  True:
            line=self.file.readline()
            if line.find(searchstr)!=-1:
                print(line,end="") #显示数据
                #插入
                if self.showview != None:
                    self.showview.addata(line)  # 显示
            if  not line: #读不到数据退出
                break
    def show(self):
        if  self.showview!=None:
            self.showview.show() #显示
    def  __del__(self):
        self.file.close()

列表显示

import tkinter
class  Listshowdata:
    def  __init__(self):
        self.win=tkinter.Tk() #构造窗体
        self.win.geometry("900x800+0+0")
        self.mylist=tkinter.Listbox(self.win,width=900,height=800) #列表框
        self.mylist.pack()
    def addata(self,insertstr): #增加数据
        self.mylist.insert(tkinter.END,insertstr)
    def  show(self):
        self.win.mainloop()  # 进入消息循环

表格显示

import tkinter
from  tkinter import ttk  #导入内部包
class  Tableshowdata:
    def  __init__(self):
        self.win=tkinter.Tk() #构造窗体
        self.win.geometry("900x800+0+0")
        self.tree = ttk.Treeview(self.win,height=800)  # 表格
        self.idnum=0 #插入的位置
        self.tree["columns"] = ("user", "password", "email")
        self.tree.column("user", width=200)  # 表示列,不显示
        self.tree.column("password", width=200)
        self.tree.column("email", width=200)

        self.tree.heading("user", text="CSDN-name")  # 显示表头
        self.tree.heading("password", text="CSDN-age")
        self.tree.heading("email", text="CSDN-tall")


    def addata(self,insertstr): #增加数据
        datalist=insertstr.split(" # ")
        if len(datalist)==3:
            self.tree.insert("", self.idnum, text="line"+str(self.idnum+1), values=(datalist[0], datalist[1], datalist[2]))  # 插入的行数,
            self.idnum+=1
    def  show(self):
        self.tree.pack()
        self.win.mainloop()  # 进入消息循环

文本显示

import tkinter
class  Textshowdata:
    def  __init__(self):
        self.win=tkinter.Tk() #构造窗体
        self.win.geometry("900x800+0+0")
        self.text = tkinter.Text(self.win,width=900,height=800)  # 文本编辑器
        self.text.pack()
    def addata(self,insertstr): #增加数据
        self.text.insert(tkinter.INSERT, insertstr)
    def  show(self):
        self.win.mainloop()  # 进入消息循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值