【问题标题】:Python Tkinter Use Entry Field to Create MessageBoxPython Tkinter 使用 Entry Field 创建 MessageBox
【发布时间】:2015-09-16 15:58:15
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    问题是 tkinter 试图调用注册为 command 的函数,用于没有任何参数的按钮,但是您的函数有 1 个参数 - root 没有任何默认变量,因此这导致了您的问题有。

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

    1. Entry.get() 返回一个字符串,但是您尝试将其与 integer 进行比较,它永远不会相等,因此即使您输入 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 themessage` 的功能,使用关键字参数。示例 -

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

    【讨论】:

      【解决方案2】:

      如果您使用的是 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() 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-29
        • 1970-01-01
        • 2021-02-07
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 2016-03-10
        • 1970-01-01
        相关资源
        最近更新 更多