【问题标题】:EasyGUI and Python if/else and loopEasyGUI 和 Python if/else 和循环
【发布时间】:2014-03-08 01:28:09
【问题描述】:

我的 if/else 语句和 EasyGUI 选择框似乎有些问题。我知道如果用户按下“取消”,它会返回“无”。我的代码总是输入“Else”语句。此外,我的第二个 For 循环似乎没有迭代。有没有更好的方法来选择我想要的对象(国家名称)?到目前为止,这是我的代码,带有调试输出。

更新:问题在于我出于某种原因使用 Mac。我使用了我的电脑,它按预期工作。

【问题讨论】:

  • 您确定它返回的是字符串'None' 而不是None?你试过if choice == None:if choice is None:吗?
  • choice != '无,选择 = 无! str 与内置无。
  • 关于第二个循环:似乎您的 csvdict 迭代器在第一个循环后已用尽。如果不是太多,请尝试创建一个新的迭代器或将内容复制到列表中。

标签: python easygui


【解决方案1】:

根据thischoicebox 返回None,然后按下取消按钮,而不是字符串'None'。将您的条件更改为if choice is None:,它应该可以工作。

第二个for 循环的问题在于csvdict 是一个迭代器,在您在第一个for 循环中使用它后会耗尽。您可以创建一个新的迭代器,或者将文件的内容存储在列表或字典中(如果数据不多的话)。您已经为 country 字段执行了此操作,但您似乎需要所有字段。最好的办法可能是创建一个 dictcountry 名称映射到包含其他字段的列表,这样您就可以快速访问它们,而不必再次遍历所有国家。

// instead of your first for loop
choices = dict()
for line in csvdict:
    choices[line['Country']] = line
...
// instead of your second for loop
if choice in choices:
    line = choices[choice]
    ...

【讨论】:

  • 感谢您的回复。您的代码的第一部分完美运行。我对您的第二段代码有不同的问题。当它运行时,它说: line = choice[choice] TypeError: list indices must be integers, not str.你知道为什么会这样吗?
  • Choice 是用户在选择框中选择的国家/地区名称。
  • 哦,对了,现在我明白了。您确定您更改为第一个 for 循环,以便创建一个将国家/地区名称映射到其余信息的字典吗?在您的情况下,choices 似乎仍然是一个普通的旧列表。
  • 哦,我知道你现在在哪里改变了。我收到该代码的此错误:choices[line['Country']] = line TypeError: list indices must be integers, not str
  • 您是否更改了循环上方的行以使 choices 成为字典? choices = dict() 以防万一您遇到下一个错误,请将 choicebox(msg, title, choices) 更改为 choicebox(msg, title, list(choices))
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2012-06-18
  • 2014-06-07
相关资源
最近更新 更多