【问题标题】:How do populate a Tkinter optionMenu with items in a list如何用列表中的项目填充 Tkinter optionMenu
【发布时间】:2013-08-15 06:41:37
【问题描述】:

“我想在 Tkinter 中使用各种列表中的项目填充选项菜单,我该怎么做?在下面的代码中,它将整个列表视为菜单中的一个项目。我尝试使用 for 语句循环遍历列表,但它只给了我几次'a'的值。

from Tkinter import *

def print_it(event):
  print var.get()

root = Tk()
var = StringVar()
var.set("a")
lst = ["a,b,c,d,e,f"]
OptionMenu(root, var, lst, command=print_it).pack()
root.mainloop()

我现在想将变量传递给这个函数,但是第二行出现语法错误:

def set_wkspc(event):
  x = var.get()
  if x = "Done":
      break
  else:
      arcpy.env.workspace = x
  print x

【问题讨论】:

    标签: python list tkinter optionmenu


    【解决方案1】:

    您的代码中的lst 是一个包含单个字符串的列表。

    使用具有多个菜单名称的列表,并按如下方式指定它们:

    ....
    lst = ["a","b","c","d","e","f"]
    OptionMenu(root, var, *lst, command=print_it).pack()
    ....
    

    【讨论】:

    • 我的下一个问题是,有没有办法选择多个选项?然后我会填充一个新列表以执行操作?并且,与下拉列表相比,我也可以使用用户输入选项吗?
    • @kflaw,否。OptionMenu 只允许选择一项。您可能需要使用列表框。
    • 谢谢,我会看看的。我正在修改我想将变量从选项菜单传递给的函数,但它不喜欢函数中第二行的语法,我不知道如何修复?我已经在上面发布了
    • 使用== 而不是=。请针对其他问题发布单独的问题。
    【解决方案2】:

    在第 2 行的代码中,您使用 = 而不是使用 == 作为 if 语句,并且不要在循环外使用 break 关键字,而是使用 pass。 将其更改为以下内容:

    if x == "Done":
        pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 2019-07-04
      • 2021-03-09
      • 2019-03-13
      • 2017-12-31
      • 2016-05-10
      • 2016-11-30
      • 2020-07-09
      相关资源
      最近更新 更多