Tkinter按钮命令参数

时间:2015-11-29 01:55:31

标签: python-3.x tkinter tk

我一直在寻找使用python的tkinter,因为我对GUi非常感兴趣,并认为这将是一个很好的起点。我经历了一些很好的教程,比如The New Boston set和一两个theres来掌握基础知识。现在我试图通过一个“#39;”#39;通过一个按钮,我的程序将继续我的IF语句,我没有快乐。

请参阅附件代码:

  try:
    from tkinter import *
except ImportError:
    from Tkinter import *
eod = 'no'
selection = []
selection1 = 'nothing'
while eod != 'yes':

    def beer():
        selection.append('Beer')
        selection1 = 'Beer'
    def wine():
        selection.append('Wine')
    def whiskey():
        selection.append('Whiskey')

    welcomeGUI = Tk()
    welcomeGUI.geometry('400x200+100+200')
    welcomeGUI.title('Drinks Despenser')

    welcomLabel1 = Label(welcomeGUI, text='Drinks-O-Matic', font='Times 22 bold').grid(row=0,column=2)
    welcomLabel2 = Label(welcomeGUI, text='Please select drink', font='Times 16 bold').grid(row=1,column=2)


    beerButton = Button(welcomeGUI, text='Beer', font='Times 16 bold',command=beer()).grid(row=6,column=1)
    wineButton = Button(welcomeGUI, text='Wine', font='Times 16 bold').grid(row=6,column=2)
    whiskeyButton = Button(welcomeGUI, text='Whiskey', font='Times 16 bold').grid(row=6,column=3)

    if selection1 is 'Beer':
        welcomeGUI.destroy()
        beerGUI = Tk()
        beerGUI.geometry('400x200+100+200')
        beerGUI.title('Beer Despenser')

        beerGUI.mainloop()


    welcomeGUI.mainloop()

1 个答案:

答案 0 :(得分:2)

好的,这里有很多事情,所以我认为有几件事情可以帮助你。

您需要将def移出while循环以获取所有功能。它们应该只在文件的开头定义一次。

此外,您在调用Button方法后将变量分配给grid对象。该方法返回None,因此您不应该这样做,因为您正在分配变量None而不是您想要的实际按钮对象。您应该单独为变量分配按钮对象,然后再调用varname.grid()

最后,要解决您的问题:当您编写command=beer()时,您再次调用函数beer并将其返回值分配给command参数。使用Tkinter时,必须仅为命令参数(例如command=beer)分配函数名称。但是,如果必须传递参数,则可以使用lambda。例如:command=lambda: beer(arg1, arg2)

P.S。 在比较字符串时,您应该说

if selection1 == "Beer":

不是

if selection1 is "Beer":

is测试身份不平等,你想测试相等性。

编辑:您还应该取消文件顶部的try

另外因为selection1是函数beer中的局部变量,它不能工作,你需要将它声明为全局

def beer():
    global selection1
    selection.append('Beer')
    selection1 = 'Beer'

此外,您需要销毁窗口或while循环中的if语句不会运行。

def beer(window):
    global selection1
    selection.append('Beer')
    selection1 = 'Beer'
    window.destroy()

然后你需要将welcomeGUI Tk实例传递给函数,如此

beerButton = Button(welcomeGUI, text='Beer', font='Times 16 bold',command=lambda: beer(welcomeGUI)).grid(row=6,column=1)

最后一件事。我会一起删除while循环并在啤酒窗口上有一个按钮来回调主欢迎窗口,因为在while循环中放置两个mainloops并不是一件好事。