2017-11-01 10 views
1

미터법 측정을 Imperial 또는 다른 방법으로 변환 할 GUI를 만들려고합니다. 그러나 Entry 위젯에서 변수를 가져 오는 데 문제가 있습니다. 내 정확한 오류는 다음과 같습니다입력 위젯을 사용할 때의 오류 Tkinter

Exception in Tkinter callback Traceback (most recent call last): File "C:\Python32\lib\tkinter__init__.py", line 1399, in __call__ return self.func(*args) TypeError: valid() takes exactly 1 positional argument (2 given)

나는 같은 오류의 대부분을 가지고 그러나 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() 
+0

나에게 오류가없는 작동 n 3.6, 들여 쓰기가 정확한지 확인하십시오. – Nae

+0

@ Nae는 당신에게 효과가 있습니까? 올바르게 작동하는 것은 불가능해야합니다. 실제로 입력 상자에 무엇인가 입력하고 리턴 키를 누르십니까? –

+0

@BryanOakley 아 아니, 네 말이 맞아. 나는이 항목을 시험해 보지 않았습니다 .- ' – Nae

답변

1

함수를 바인드 할 때 tkinter는 항상 이벤트를 나타내는 객체를 전달합니다.

변경 valid이 이렇게 될 :

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

같은 기능에 여러 위젯을 결합하는 경우, 이벤트를받은 위젯 event.widget입니다. 따라서 예를 들어, 당신은 더 재사용하기 위해 다음과 같은 코드를 다시 작성할 수 :

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

추가 문서와 bind 방법에 대한 예는 여기에서 찾을 수 있습니다 :

+0

감사합니다. 잘 작동합니다. 온라인에서 답변을 찾는 것이 어렵다는 것을 알았습니다. tkinter를 배우기 위해 어떤 소스를 사용 했습니까? –

+1

@MatthewCudby Bryan은 tkinter에 대해 매우 잘 알고 있습니다.> – citizen2077

+0

@matthew Bryan은 Tkinter가 존재하기 전에 오랫동안 Tcl/Tk를 오랫동안 사용해 왔습니다. –