我这里有我的剧本
from tkinter import *
from tkinter import messagebox
import commands
db=''
def launch():
# Database Check.
if db.lower() == 'y':
commands.db_download()
else:
db.lower() == 'n'
root = Tk()
checklabel = Label(root, text="Check for new databases? Y/N: ")
checkentree = Entry(root, textvariable=db)
checkbutton = Button(root, text="Go", command=launch)
checklabel.pack()
checkentree.pack()
checkbutton.pack()
root.mainloop()
一切正常,除了匹配的部分。 当我在输入框中输入“y”或“n”,甚至任何其他内容并单击“Go”时,什么都不会发生。。。为什么什么都没发生?我怎样才能让它工作呢?你知道吗
有一个改变,你需要作出和一对夫妇,这是一个好主意。你知道吗
第一,“需要”改变:
在tkinter小部件中使用
textvaraible
时,必须使用其中一个objectvar(即:StringVar、IntVar等等)。还要记住,您需要在db
上使用.get()
,因为get()
方法是从ObjectVar获取值的方法。你知道吗要完成此更改,请执行以下操作:
对此:
以及将您的
db
tkinter代码移过root
,否则StringVar将抛出这个错误AttributeError: 'NoneType' object has no attribute '_root'
,因为您还没有启动StringVar要锁定的tk实例。你知道吗也就是说,你应该改变你导入tkinter的方式,或者清理你的小部件名称和打包方式。你知道吗
最好是
import tkinter as tk
而不是from tkinter import *
,因为这有助于防止意外地从其他导入或您自己的变量/函数/类名覆盖导入。要使用这个新的导入方法,您只需要为每个方法/小部件使用前缀tk.
。你知道吗如果您不打算修改一个小部件(例如:永久性标签、按钮等),您不需要将其分配给变量,只需直接在小部件上使用您的几何管理器(在本例中是
pack()
)。你知道吗最后,您的
if/else
语句并不完全正确。它将起作用,但这一行db.lower() == 'n'
没有做你认为它在做的事情。else
语句没有任何要满足的条件。它只是if/elif/else
语句中的最后一个选项,如果其他条件都不满足,它将运行。也就是说,如果你什么都不想做,如果其他条件都不满足,你可以简单地删除逻辑语句的else
部分。你知道吗请看下面的代码:
textvariable
参数应该是StringVar。但是db
是一个字符串,而不是StringVar。尝试传递StringVar。你知道吗
相关问题 更多 >
编程相关推荐