【问题标题】:Assign OptionMenu Variable in Python在 Python 中分配 OptionMenu 变量
【发布时间】:2014-10-11 18:26:55
【问题描述】:

我正在开发一个允许用户选择日期和位置来访问特定文件的菜单系统。我知道每个特定文件都会有很多硬编码。我想使用 OptionMenu 系统。我正在打印值,但是如何定义这些值并将它们传递给函数以打开该特定文件。我在想一个很长的 if else 语句。 (IE if Monday && a 则传递此调用函数)。

这是我的代码

#mainmenu
class MyOptionMenu(OptionMenu):
 def __init__(self, master, status, *options):
    self.var = StringVar(master)
    self.var.set(status)
    OptionMenu.__init__(self, master, self.var, *options)
    self.config(font=('calibri',(20)),bg='white',width=20)
    self['menu'].config(font=('calibri',(10)),bg='white')

root = Tk()
#attemtping to assign numerical values
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
mymenu1 = MyOptionMenu(root, 'Select day', 'Monday','Tuesday','Wednesday', 'Thursday', 'Friday')
mymenu2 = MyOptionMenu(root, 'Select Location', 'd','e','f')
#menus come up fine and values correctly printed
def ok():
print "value is", (mymenu1.var).get(), (mymenu2.var).get()
button = Button(root, text="OK", command=ok)
button.pack()
mymenu1.pack()
mymenu2.pack()
(mymenu1.var).get()
(mymenu2.var).get()
#assign variable x to return values
x = (mymenu1.var).get()
if x <2:
    print 'Negative changed to zero'
elif x == 0:
    print 'Zero'
elif x == 1:
    print 'Single'
else:
    print 'More'

root.mainloop()

我将其作为输出 “更多的”/ “值是星期一 e”,这表明我能够访问正确的结果,但在下一步中实施该变量(星期二)时我迷失了。

【问题讨论】:

  • 如果我理解正确,您想使用输入的日期和字母找到正确的文件。如何执行此操作取决于文件位置和名称。所有文件都在同一个文件夹中吗?如果不是,文件夹叫什么(这是固定的还是您可以根据需要更改它)?这些文件叫什么(你能不能再改变一下)?所有这些不同的情况可能会有不同的解决方案。

标签: python tkinter optionmenu


【解决方案1】:

@JustForFun,你的问题有点纠结,有点难以思考,但我想我明白你想要什么。 首先,您将最后一部分放在错误的位置(来自#assign variable x to return values),这将在开始时运行,但不会在单击ok 按钮后运行,因此x 将始终等于'Select day'(因此为什么你在运行它时会打印more),你应该把它放在一个要在ok()ok()本身中调用的函数中:

def ok():
    print "value is", (mymenu1.var).get(), (mymenu2.var).get()
    x = (mymenu1.var).get()
    if x <2:
        print 'Negative changed to zero'
    elif x == 0:
        print 'Zero'
    elif x == 1:
        print 'Single'
    else:
        print 'More'

这将获得 x 的值并在单击 ok 时对其进行测试,并且它可能会导致更多操作,例如使用获得的结果打开文件等。但是,您(我认为)只是冲到了最后一个与if/elif 等语句分开,因为第一个if...: 将拾取低于2 (elif 语句不会评估为真,你打算让(>) 在第一个声明? 此外,您可能需要在 if/elif 语句中包含第二个选项菜单的变量:

if x > 2 and y == ...:
    # open specific file? etc...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2015-02-22
    相关资源
    最近更新 更多