我一直在寻找使用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()
答案 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并不是一件好事。