Python 如何在写入时更新组合框值?

Python How to update combobox values while writing?

我想要一个值列表,当我编辑 ComboBox 上方文本字段中的文本时会更新这些值,但我找不到访问此文本字段值的选项。

我想出了一种荒谬的解决方案,包括在 ComboBox 上盖上一个 Entry Box header,因此我可以编辑 Entry Box 并绑定它以获取其值以更新 ComboBox。

我怎样才能做得更好?

import tkinter as tk
from tkinter import ttk
def Run(size=(300,100)):
    a_set=('one','two','three')
    master = tk.Tk()
    master.geometry(str(size[0])+'x'+str(size[1]))
    lista=tk.ttk.Combobox(master,width=22,values=a_set)
    lista.grid(row=0,column=0)
    def update(event):
        a=event.widget.get()
        newvalues=[i for i in a_set if a in i]
        lista['values']=newvalues
    entry=tk.Entry(master)
    entry.bind('<KeyRelease>',update)
    entry.grid(row=0,column=0)
    
    master.mainloop()
Run()

这里。我认为你正在尝试实现自动完成。 ttk需要单独导入

import tkinter as tk
from tkinter import ttk
def Run(size=(300,100)):
    a_set=('one','two','three')
    master = tk.Tk()
    master.geometry(str(size[0])+'x'+str(size[1]))
    lista=ttk.Combobox(master,width=22,values=a_set)
    lista.grid(row=1,column=0)
    def update(event):
        a=event.widget.get().lower()
        newvalues=[i for i in a_set if a in i]
        lista['values']=newvalues
    entry=tk.Entry(master)
    entry.bind('<KeyRelease>',update)
    entry.grid(row=0,column=0)
    
    master.mainloop()
Run()

您可以使用 combobox 的 textvariable 选项。

import tkinter as tk
from tkinter import ttk


def update(*args):

    newvalues=[i for i in a_set if var.get() in i]
    lista['values']=newvalues

    
a_set=('one','two','three')
master = tk.Tk()

var = tk.StringVar()
var.trace('w', update)

lista = ttk.Combobox(master, width=22, textvariable=var)
lista.grid(row=0,column=0)
   

master.mainloop()