我想知道我是否可以对此有所了解。
我从一个表接收记录集,该表的字段为id,desc。
我想在组合框上显示“值”,但是选择后要接收的变量是对应的“ id”。
我可以用id创建一个列表,用desc创建一个列表
我可以将“值”发送到组合,但是...如何使组合框显示值和接收ID?
def loadCombo(self):
sql = "SELECT id, desc FROM table"
misq = conn.query2(sql)
misc , misv = [] , []
for xx in misq:
misv.append(xx["desc"])
misc.append(xx["id"])`
self.box = ttk.Combobox(self.master, textvariable=self.idquiniela, state="readonly", choices=misc, values=misv )
self.box.pack()
选择时出现错误!
谢谢
我的第一个想法是使用字典而不是列表。如果由于其他原因而拥有这两个列表,则可以通过以下方式将它们变成字典:
ids = ['Hello', 'World', 'Foo', 'Bar']
vals = [64, 8, 4, 2]
mydict = dict(list(zip(ids,vals)))
一旦有了字典,就可以在查询组合框时使用mydict [combobox.get()]。如果要在其他几个地方使用此功能,则可能需要创建自定义版本的组合框,例如:
from tkinter import Tk
from tkinter import ttk
class NewCBox(ttk.Combobox):
def __init__(self, master, dictionary, *args, **kw):
ttk.Combobox.__init__(self, master, values = sorted(list(dictionary.keys())), state = 'readonly', *args, **kw)
self.dictionary = dictionary
self.bind('<<ComboboxSelected>>', self.selected) #purely for testing purposes
def value(self):
return self.dictionary[self.get()]
def selected(self, event): #Just to test
print(self.value())
lookup = {'Hello': 64, 'World' : 8, 'Foo': 4, 'Bar': 2}
root = Tk()
newcb = NewCBox(root, lookup)
newcb.pack()
然后只使用'value()'方法而不是'get()'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句