使用循环时,OptionMenu的选项不会显示 - tkinter

时间:2015-12-12 00:55:12

标签: python tkinter

有一个OptionMenu,即使在使用 get()之后,我的选项也没有进行diplaying 我将所有值附加到列表中,因为我希望它稍后在我的GUI中再次加载它 这是我的代码

self.make_a_list=[]
self.number_row=1
def function_1(self):
    self.var=StringVar()
    options=["one","two","three","four"]
    menu1=OptionMenu(self,self.var,*options)
    menu1.config(width=10)
    menu1.grid(column=5,row=int(self.number_row))
    self.make_a_list.append(self.var)
    self.var.set("one")
    self.number_row=self.number_row+1

def function_2(self):
   for i in range(self.number_row):
       print(self.make_a_list[i].get())

我知道我做错了但却找不到

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到的唯一问题是您从self.make_a_list设置为1(一)而不是0(零)开始。第一次创建变量时,将其附加到). Then, you increment,使其为零项(即:self.make_a_list [0] function_2 self.number_row`使其成为2.

range(self.number_row)range(2)进行循环。如果你只有一个选项菜单,这将循环def function_2(self): for item in self.make_a_list: print(item.get()) ,意味着0和1.由于列表只有一个项目,你第二次通过循环时会得到一个索引超出范围错误。

在python中,你不需要按索引遍历列表。而不是使用索引,简单地逐个元素遍历列表元素。如果您养成了以这种方式使用列表的习惯,那么您将永远不会遇到这种类型的逐个错误。

var autocomp	=	jQuery.noConflict();
autocomp(document).ready(function() {
  var aTags = ["ask<####>1","always<####>2", "all<####>3", "alright<####>4", "one<####>5", "foo<####>6", "blackberry<####>7", "tweet<####>8","force<####>9", "westerners<####>10", "sport<####>11"];
  /****
            var newATags = [{label: "ask", value: "1"}, {label: "always", value: "2"}, {label: "all", value: "3"},
                {label: "alright", value: "4"}, {label: "one", value: "5"}, {label: "foo", value: "6"},
                {label: "blackberry", value: "7"}, {label: "tweet", value: "8"}, {label: "force", value: "9"},
                {label: "westerners", value: "10"}, {label: "sport", value: "11"}];
            **/
  newATags = aTags.map(function(currentValue, index, array) {
    var retVal = {};
    retVal.label = currentValue.substr(0, currentValue.indexOf('<'));
    retVal.value = currentValue.substr(currentValue.indexOf('>') + 1);
    return retVal;
  });
  autocomp('#category').autocomplete({
    source: newATags,
    select: function(e, ui) {
      var tmp = ui.item.label;
      ui.item.label = ui.item.value;
      ui.item.value = tmp;
      autocomp('#results').text(ui.item.label);
    },
    open: function (e, ui) {
      var acData = autocomp(this).data('ui-autocomplete');
      acData.menu.element.find('li').each(function () {
        var me = autocomp(this);
        var keywords = acData.term.split(' ').join('|');
        me.html(me.text().replace(new RegExp("(" + keywords + ")", "gi"), '<b>$1</b>'));
      });
    }
  });
});