ОБНОВЛЕНИЕ!
Код ниже теперь работает, я забыл уничтожить начальное окно Tk root.
Я пытался прочитать файл 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
. Может кто-нибудь помочь объяснить, почему это происходит и где я иду не так?
Спасибо