更新
下面的代码现在可以工作了,我忘了销毁最初的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
的回调而消失。有人能解释一下为什么会发生这种情况,我错在哪里吗
谢谢
请参阅更新:
我忘了破坏最初的Tk根窗口。更新和工作现在
相关问题 更多 >
编程相关推荐