据我所知,目前在Python中没有办法获得弹出菜单。你必须通过TCL来实现。缺点是“.f.l”是引用的一部分,因为它依赖于内部小部件的实现。这里有一个组合框的例子,当你按下键盘按钮时,它会根据第一个字母来选择项目。在from tkinter import ttk
import itertools as it
class mycombobox(ttk.Combobox):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pd = self.tk.call('ttk::combobox::PopdownWindow', self) #get popdownWindow reference
lb = pd + '.f.l' #get popdown listbox
self._bind(('bind', lb),"",self.popup_key_pressed,None)
def popup_key_pressed(self,evt):
values = self.cget("values")
for i in it.chain(range(self.current() + 1,len(values)),range(0,self.current())):
if evt.char.lower() == values[i][0].lower():
self.current(i)
self.icursor(i)
self.tk.eval(evt.widget + ' selection clear 0 end') #clear current selection
self.tk.eval(evt.widget + ' selection set ' + str(i)) #select new element
self.tk.eval(evt.widget + ' see ' + str(i)) #spin combobox popdown for selected element will be visible
return