我对Tkinter有些陌生,只有很少的Python经验,所以我希望答案不是太明显,我试图寻找答案,却找不到任何有用的东西。基本上我正在尝试构建一个程序(作为现在的占位符测试),如果用户在输入字段中输入1并点击提交,则会出现一个窗口,告诉他们输入1,否则他们会被告知键入1。如果我的理解正确,这应该有效:
from Tkinter import *
#-----------------------------------------------------------
import tkMessageBox
root = Tk()
#-----------------------------------------------------------
root.title('Payroll System')
#-----------------------------------------------------------
def on_printtext(root):
global entryform
string = entryform.get()
if string == 1:
tkMessageBox.showinfo('You typed 1')
elif string != 1:
tkMessageBox.showinfo('Please type 1')
#-----------------------------------------------------------
entryform = Entry(root)
entryform.pack()
submit = Button(root, text="Submit", command=on_printtext)
submit.pack()
root.mainloop()
但是,当我尝试运行它并在点击提交后在输入表单中输入1时,我得到了这个:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1489, in call
return self.func(*args)
TypeError: on_printtext() takes exactly 1 argument (0 given)
答案 0 :(得分:0)
问题是tkinter试图在没有任何参数的情况下调用注册为command
的按钮的函数,但是你的函数有1个参数 - root
没有任何默认变量,因此它是导致你遇到的问题。
您的代码中还有其他一些问题 -
Entry.get()
返回一个字符串,但是你试图将它与一个整数进行比较,它永远不会相等,所以即使你输入1,它仍会显示Please type 1
。
当您执行 - tkMessageBox.showinfo('You typed 1')
时 - 您实际上是将title
设置为You typed 1
,而不是实际消息。对于使用关键字参数的tkMessageBox , the first argument is the title, and the second argument is the message. If you want that as the message, set it as the
message`的功能。示例 -
tkMessageBox.showinfo(message='You typed 1')
有效的示例代码 -
from Tkinter import *
import tkMessageBox
root = Tk()
root.title('Payroll System')
def on_printtext():
global entryform
strng = entryform.get()
if strng == '1':
tkMessageBox.showinfo(message='You typed 1')
else:
tkMessageBox.showinfo(message='Please type 1')
entryform = Entry(root)
entryform.pack()
submit = Button(root, text="Submit", command=on_printtext)
submit.pack()
root.mainloop()
答案 1 :(得分:0)
如果您使用的是Python 3.x,则由于tkMessageBox已更改为messagebox,因此上面的代码不起作用。
这是修改后的代码:
from tkinter import * # modif 1 Tkinter with minus t !
import tkinter.messagebox # modif 2:tkMessageBox no longer valid
root = Tk()
root.title('Payroll System')
def on_printtext():
global entryform
strng = entryform.get()
if strng == '1':
tkinter.messagebox.showinfo(message='You typed 1') # modif 3
else:
tkinter.messagebox.showinfo(message='Please type 1') # modif 4
entryform = Entry(root)
entryform.pack()
submit = Button(root, text="Submit", command=on_printtext)
submit.pack()
root.mainloop()