互联网上的大家好!我正在
python
和 tkinter
中制作股票预测模型,但当我尝试在 Python
上搜索“a”时,我遇到了无响应 on the combo box widget
的问题。 combobox
具有自动填充功能,它包含股票名称列表,列表大小为 3971 行长。 无反应蟒蛇
这是我的代码:
# import gui
import tkinter as tk
from tkinter import ttk
import pandas as pd
def start_win():
# create instance
win = tk.Tk()
# title name
win.title("test")
# resizable option
win.resizable(True, True)
# window size
win.geometry("375x315")
top_frame = ttk.LabelFrame(win, text='')
top_frame.grid(column=0, row=0, padx=10, pady=10)
# import csv
csv = pd.read_csv('stocks.csv')
stock_names = csv['Name'].tolist()
stock_names.append('Other')
ttk.Label(top_frame, text='Search Stocks: ').grid(column=0, row=0)
# combo box
stocks_var = tk.StringVar()
stocks = ttk.Combobox(top_frame, width=10, textvariable=stocks_var)
stocks['values'] = stock_names
#stocks['values'] = ('other')
stocks.grid(column=1, row=0)
stocks.current(0)
def search(e):
value = stocks.get()
print(value)
if value == '':
stocks['values'] = stock_names
else:
data = []
for i in stock_names:
if value.lower() in i.lower():
data.append(i)
stocks['values'] = data
win.bind('<KeyRelease>', search)
# start GUI
win.mainloop()
# sub
sub = tk.Tk()
sub.title('sub window')
sub.resizable(True, True)
sub.geometry("375x315")
#sub button func
def sub_button_func():
sub.quit()
sub.destroy()
start_win()
exit()
#sub button
sub_button = ttk.Button(sub, text='OK', command=sub_button_func)
sub_button.grid(column=0, row=2)
sub.mainloop()
我认为问题是因为列表太大,我认为可以通过
numpy
解决
谢谢您的帮助!
我尝试运行包含 3971 个项目的代码,每个项目有 103 个值。 GUI 仍然工作正常,但搜索功能有问题。 (此外,您可以分开并仔细检查
csv = pd.read_csv('stocks.csv')
stock_names = csv['Name'].tolist()
stock_names.append('Other')
)
我想你想用
stocks.bind("<<ComboboxSelected>>", search)
比
win.bind('<KeyRelease>', search)
还有搜索功能,线
stocks['values'] = data
将组合框中所有可用的股票名称替换为“data”值
当您替换原始股票名称列表时,我不确定您想在搜索功能中做什么