gpt4 book ai didi

python - Tkinter StringVar 获取所选选项的索引

转载 作者:行者123 更新时间:2023-12-04 14:01:08 28 4
gpt4 key购买 nike

我正在使用 OptionMenu 从下拉列表中选择一个选项

self.var = tk.StringVar()
tk.OptionMenu(self, self.var, *self.options)

选项可能包含重复项

因此,当我想知道选择了哪个选项时,我需要知道它在选项列表中的索引,而不仅仅是它的文本。
self.options.index(self.var.get())

然而,这是 O(n) 并且也会因重复而失败。

如何以可处理重复项的方式找出选择对象的索引(首选效率但不是必需的)?

最佳答案

不幸的是,这似乎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()

(建议;您也可以调整字体...这可以更轻松地调整 widthextra_whitespace )

关于python - Tkinter StringVar 获取所选选项的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43292974/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com