代码之家  ›  专栏  ›  技术社区  ›  Matthew Cudby

使用entry widgets Tkinter时出错

  •  1
  • Matthew Cudby  · 技术社区  · 7 年前

    我试图创建一个GUI,将公制测量值转换为英制或其他方式。但是,我在从 Entry 小装置。我的确切错误是:

    回溯(最近一次呼叫最后一次): 文件“C:\Python32\lib\tkinter\uu init\uuuuuu.py”,第1399行,在\uu调用中__ 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()
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Bryan Oakley    7 年前

    绑定函数时,tkinter始终传入表示事件的对象。

    改变 valid

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

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

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

    附加文档和示例 bind