【问题标题】:Errors when using entry widgets Tkinter使用条目小部件 Tkinter 时出错
【发布时间】:2018-04-14 07:41:10
【问题描述】:

我正在尝试创建一个 GUI,它将公制测量转换为英制或相反。但是,我无法从 Entry 小部件获取变量。我的确切错误是:

Tkinter 回调异常 回溯(最近一次通话最后): 文件“C:\Python32\lib\tkinter__init__.py”,第 1399 行,在 __call__ 中 返回 self.func(*args) TypeError:valid() 正好采用 1 个位置参数(给定 2 个)

我曾尝试使用textvariable 方法,但是我遇到了很多相同的错误。 我对此有点陌生,所以我不确定这里有什么问题。帮助将不胜感激。

from tkinter import *

root = Tk()
class Buttons:
    def __init__(self,master,ImperialText,MetricText,metricVal):
        self.ImperialText = ImperialText
        self.MetricText = MetricText



        self.master = master
        self.Text1 = (ImperialText +'-'+ MetricText)
        self.button = Button(self.master,text= self.Text1,command = self.calc)
        self.button.grid(column = 0)
        self.button.config(height= 3,width=30)

    def calc(self):
        self.EntryStr = None
        self.entry = Entry(self.master)
        self.label = Label(self.master,text = 'Enter '+self.ImperialText)

        self.entry.grid(column = 1,row = 1)
        self.label.grid(column = 1,row = 0)

        self.entry.bind('<Return>',self.valid)

    def valid(self):
        print (str(self.entry.get()))

button1 = Buttons(root,'inches','centimetres',2.54)
button2 = Buttons(root,'miles','kilometres',1.6093)
button3 = Buttons(root,'foot','metres',0.3048)
button4 = Buttons(root,'yards','metres',0.9144)
button5 = Buttons(root,'gallons','litres',4.546)
button6 = Buttons(root,'pounds','kilograms',0.454)
button7 = Buttons(root,'ounces','grams',0.454)

root.mainloop()

【问题讨论】:

  • 在 3.6 中对我来说没有错误,请确保您的缩进是正确的。
  • @Nae 你确定它适合你吗?应该不可能正常工作。你真的在输入框中输入了什么然后按回车键吗?
  • @BryanOakley 啊不,你是对的。我没试过输入-.-'

标签: python tkinter tkinter-entry


【解决方案1】:

当你绑定一个函数时,tkinter 总是传入一个代表事件的对象。

valid改成这样:

    def valid(self, event):
        print (str(self.entry.get()))

如果将多个小部件绑定到同一个函数,则接收事件的小部件是event.widget。因此,例如,您可以像这样重写代码以使其更可重用:

def valid(self, event):
    print(event.widget.get())

bind 方法的其他文档和示例可在此处找到:

【讨论】:

  • 谢谢这很好用,我发现很难在网上搜索答案你用什么资源来学习 tkinter?
  • @MatthewCudby Bryan 对 tkinter 非常了解,请查看他以前的答案以了解很多 tkinter 内容:>
  • @matthew Bryan 已经使用 Tcl/Tk 很长时间了,也许在 Tkinter 存在之前...
  • @MatthewCudby:从 90 年代开始,我是一名专业的 tcl/tk 开发人员已有几年;对我来说学习 tkinter 只是将 tcl/tk 命令翻译成 python。
  • @MatthewCudby:它是一个普通的 python 对象,所以是的,你可以将它存储在另一个变量中,将它传递给另一个函数,等等。我不确定你为什么要这样做,因为它是除了在为事件提供服务的情况下,其他任何地方都真的没有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2019-06-04
  • 1970-01-01
相关资源
最近更新 更多