Tkinter列表框搜索

2024-03-29 06:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

更新

下面的代码现在可以工作了,我忘了销毁最初的Tk根窗口


我一直在尝试将一个csv文件读入一个数据框,然后将列名放入一个可搜索的列表框中,并尝试了这个方法

from tkinter import *
from tkinter import filedialog
import tkinter as tk
import pyautogui as gui
import pandas as pd

gui.alert(text="Please Select Data File.", title="Data")
raw_root = tk.Tk()
raw_root.withdraw()
file_path = filedialog.askopenfilename()
raw_root.destroy()
data = pd.read_table(file_path, encoding='ANSI')
data = data.drop([0], axis=0)
data = data.apply(pd.to_numeric, axis=1, errors='coerce')

class Application(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.create_widgets()

    def getInput(self):
        a = self.lbox.curselection()
        root.destroy()
        global inputs
        inputs = a

    def create_widgets(self):
        self.search_var = StringVar()
        self.search_var.trace("w", lambda name, index, mode: self.update_list())
        self.entry = Entry(self, textvariable=self.search_var, width=13)
        self.lbox = Listbox(self, width=45, height=15)
        self.btn = Button(self, width=15, text='Enter', command=self.getInput)
        self.entry.grid(row=0, column=0, padx=10, pady=3)
        self.lbox.grid(row=1, column=0, padx=10, pady=3)
        self.btn.grid(row=2, column=0, padx=10, pady=3)
        self.update_list()

    def update_list(self):
        search_term = self.search_var.get()
        channels = list(data.columns)
        self.lbox.delete(0, END)

        for item in channels:
            if search_term.lower() in item.lower():
                self.lbox.insert(END, item)


root = Tk()
root.title('Select Channels')
app = Application(master=root)
app.mainloop()

如果我删除了代码的文件导入部分,而是在def update_list中使用下面的列表,那么这种方法是有效的

a_list = ['Can','We','Search','For','Words','Yet']

但是,当使用代码的文件导入部分时,搜索功能会随着对getInput的回调而消失。有人能解释一下为什么会发生这种情况,我错在哪里吗

谢谢


Tags: 文件代码importselfsearchdatatkintervar