我正在使用OptionMenu从下拉列表中选择一个选项
self.var = tk.StringVar()
tk.OptionMenu(self, self.var, *self.options)
选项可能包含重复项
因此,当我想知道选择了哪个选项时,我需要知道选项列表中的索引,而不仅仅是文本。
self.options.index(self.var.get())
然而,这是O(n)并且也没有重复。
如何以一种适用于重复项的方式找出select对象的索引(效率首选但不是必需的)?
答案 0 :(得分:0)
不幸的是,这似乎是impossible。
但是,我得到了一个(丑陋的)解决方法。它基于ttk.Combox
(其中禁用了入口部分)。此方法在最后附加每个选项的计数器。由于窗口小部件显示的最终宽度,该计数器未显示。
它相当有效地获得了索引,但是由于额外的空格,内存的存储可能不是最佳的....
import tkinter as tk
from tkinter import ttk
def set_index(text):
output=()
counter=0
for s in text:
output += (s.ljust(width+extra_whitespace)+str(counter),)
counter += 1
return output
def get_index(*x):
s= OptionVar.get()
a = int(s[s.rfind(" "):])
print(a)
return a
root = tk.Tk()
text = ("a","a","a","a","d","g","fgggggggh","j","a","l","p","a","d","D")
# not entirely sure if width is based on character_width
# you should adjust these nubmer to your own needs....
width = max(map(len,text)) + 3
extra_whitespace = 20
text_with_index = set_index(text)
OptionVar = tk.StringVar()
OptionVar.set(text_with_index[0])
OptionVar.trace("w", get_index)
O = ttk.Combobox(root, textvariable=OptionVar, values=text_with_index)
O.pack()
O.configure(width=width)
O.configure(state="readonly")
get_index()
root.mainloop()
(建议;您也可以调整字体...这样可以更轻松地调整width
和extra_whitespace
)
答案 1 :(得分:0)
int(np.argwhere(List==value))
已关闭,但无法识别重复项