Python Tkinter使用输入字段来创建MessageBox

时间:2015-09-16 15:58:16

标签: python python-2.7 tkinter

我对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)

2 个答案:

答案 0 :(得分:0)

问题是tkinter试图在没有任何参数的情况下调用注册为command的按钮的函数,但是你的函数有1个参数 - root没有任何默认变量,因此它是导致你遇到的问题。

您的代码中还有其他一些问题 -

  1. Entry.get()返回一个字符串,但是你试图将它与一个整数进行比较,它永远不会相等,所以即使你输入1,它仍会显示Please type 1

  2. 当您执行 - 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')
    
  3. 有效的示例代码 -

    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()