保留级联ttk.combox的索引



我不认为这是一个简单的问题,所以在回答之前请三思。我有两个python tkinter-ttk组合框,它们是级联的,这意味着你必须在第一个组合框中进行选择,然后再填充第二个。所以……如果我说第一个框中有4个元素,每个元素都有4个,那么最后一个的索引将是16。我的问题是tk.combobox为每个以0开头的框分配一个新索引,而我能得到的最好索引是4。我用value=和textvariable=选项尝试了很多方法,我传递了字典、索引在适当范围内的列表(list[12:16](,并向框中询问了各种索引,它们都从0开始,并从0开始计算第二个框中的元素。也许就是这样。。。。。idk。哦,是的,我需要索引属于数据的原因是因为我从数据库中获得了数据,而索引是记录的关键,所以必须保留它。如果yall没有答案,那么我必须把我能得到的文本从数据库中选择回来才能得到密钥。我知道这听起来很简单,所以也许我会的,但我希望尽可能将对DB的调用保持在最低限度。

没有代码,因为我不希望有代码修复。我需要知道如何给出tk.combobox值,比如(12:one,13:two,14:three(,以及何时;两个";如果被选中,我需要数字13而不是1。(也可能不希望索引显示在框中(谢谢你的阅读和对我问题的回答。**似乎我必须添加最少数量的代码,所以这里开始。

`import tkinter as tk
from tkinter import ttk
win = tk.Tk()
list = (get some records from the database here with indexes)
value = tk.StrinVar()
box = ttk.Combobox(win, value=list, textvariable=value)
box.bind("<<ComboboxSelected>>", dosomething())
box.grid(col=0,row=0)
def dosomething(event):
(get my original index here and process further using it)`

tkinter组合框的默认设置是忽略列表中的索引,并在选中时从0开始计数。请不要评论打字错误,这是董事会的最低要求。这是Access组合框的默认条件,除了tkinter,还有更好的库吗?

实现这一点的方法是编写一个加法——一个类或函数,它采用字典并使用组合框的值,然后返回所选键。tkinter小部件只返回一个从0…到selected的索引。我的解决方案是:

def ebox(self, index=None, row=None, column=None, vals=None):
self.set_var(key=index) #this just creates a tk.StringVar
lis = []
for item in vals: #converts a dictionary to a list of keys
lis.append(item)
self.combos[index] = ttk.Combobox(self.win, values=lis, textvariable=self.value[index])
self.combos[index].bind("<<ComboboxSelected>>", lambda event, y=vals: self.eboxclk(event, y))
self.combos[index].grid(row=row, column=column)
return
def eboxclk(self, event=None, index=None):
print(event.widget.get(), " the selected value ")
print(index[event.widget.get()], " the index of the selected value")
return index[event.widget.get()]

这可能可以简化,我只花了很多天的时间就找到了我所找到的所有不同的黑洞。

相关内容

  • 没有找到相关文章

最新更新