【问题标题】:Multiple ComboBoxes in Tkinter PythonTkinter Python 中的多个组合框
【发布时间】:2015-12-17 11:29:46
【问题描述】:

我正在尝试使用“config.ini”文件中的值生成多个组合框,config.ini 文件数据为:

priority1 = 正常:farty-blobble-fx.wav:2
priority8 = Reclamacao:buzzy-blop.wav:3
priority3 = Critico:farty-blobble-fx.wav:5
priority2 = 紧急:echo-blip-thing.wav:4

目标是将声音文件名转换为组合框中的选择值。

我生成组合框的代码是:

content_data = []
for name, value in parser.items(section_name):
    if name=="name":
        self.note.add(self.tab2, text = value)
    else:
        data_prior = value.split(":")
        self.PRIOR_LABEL = Label(self.tab2, text=data_prior[0])
        self.PRIOR_LABEL.grid(row=data_prior[2],column=0,pady=(10, 2),padx=(40,0))

        self.PRIOR_SOUNDS = None
        self.PRIOR_SOUNDS = None
        self.box_value = StringVar()
        self.PRIOR_SOUNDS = Combobox(self.tab2, textvariable=self.box_value,state='readonly',width=35)
        self.PRIOR_SOUNDS['values'] = getSoundsName()
        self.PRIOR_SOUNDS.current(int(getSoundsName().index(data_prior[1])))
        self.PRIOR_SOUNDS.grid(row=data_prior[2],column=1,pady=(10, 2),padx=(30,0))

        self.PLAY = Button(self.tab2)
        self.PLAY["width"] = 5
        self.PLAY["text"] = "Play"
        self.PLAY["command"] =  lambda:playSound(self.PRIOR_SOUNDS.get())
        self.PLAY.grid(row=data_prior[2], column=3,pady=(10,2),padx=(5,0))

而且我无法在组合框中显示“config.ini”文件的当前值。 提前谢谢你。

【问题讨论】:

  • 你有什么问题?你已经告诉我们你想要什么,你已经展示了一些代码,但你什么也没问。代码是否抛出错误?它是否给出了错误的行为?你做了什么调试来解决这个问题?
  • 没有显示任何错误。这根本行不通。我想问题是当我生成多个组合框时,但我不知道生成它们的另一种方法。
  • getsoundname() 每次调用时是否返回相同的内容?
  • 是的,确实如此。返回文件夹中的音频文件列表。
  • 表达式str( -1 * x)中的x是什么?

标签: python combobox tkinter


【解决方案1】:

问题是您创建了多个组合框,但您在循环的每次迭代中不断覆盖变量。在循环结束时,self.PRIOR_SOUNDS 将始终指向您创建的最后一个组合框。 self.box_valueself.PLAY等也是如此。

最简单的解决方案是使用数组或字典来存储所有变量。字典让您可以按名称引用每个小部件或变量;使用列表可以让您按序号位置引用它们。

使用字典的解决方案如下所示:

self.combo_var = {}
self.combo = {}
for name, value in parser.items(section_name):
    ...
    self.combo_var[name] = StringVar()
    self.combo[name] = Combobox(..., textvariable = self.combo_var[name])
    ...

【讨论】:

  • 你能提供一个简单的例子吗?
  • 你好布莱恩,你有一个例子吗?我想做类似的事情,但找不到方法让它工作
  • @f42:我不明白你在问什么。这个答案有一个例子。
  • 好吧,我会尝试使用您的示例并寻找解决方案。如果没有,我会开一个新帖子,因为这里解释起来很复杂
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多