Tkinter Python 自动填充组合框没有响应

问题描述 投票:0回答:1

互联网上的大家好!我正在

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

解决

谢谢您的帮助!

python tkinter combobox
1个回答
0
投票

我尝试运行包含 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”值

当您替换原始股票名称列表时,我不确定您想在搜索功能中做什么

© www.soinside.com 2019 - 2024. All rights reserved.