2015-06-28 3 views
-1

Я попытался сделать следующую программу: при открытии программы она показывает запись и кнопку с надписью «9». Символ «9» добавляется в конце записи при нажатии кнопки «9».Tkinter - кнопка, которую я сделал, не работает

Код, приведенный ниже, я написал, но он не работает так, как я предполагал. Кнопка не работает, и запись показывает «09», а не «0».

# -*- coding : utf-8 -*- 
import Tkinter as Tk 
class calculator: 
    def __init__(self, master): 
     self.num = Tk.StringVar() 
     self.opstate = None 
     self.tempvar = 0 

     # entry 
     self.entry = Tk.Entry(root, textvariable = self.num, justify=Tk.RIGHT, width = 27) 
     self.entry.pack(side = Tk.TOP) 
     self.num.set("0") 

     # Buttons 
     self.numbuts = Tk.Frame(master) 
     self.ins9 = Tk.Button(self.numbuts, text = "9", width = 3, command = self.fins(9)) 
     self.ins9.pack() 

     self.numbuts.pack(side = Tk.LEFT) 

    ##### Functions for Buttons ##### 
    def fins(self, x): 
     self.entry.insert(Tk.END, str(x)) 

root = Tk.Tk() 
calc = calculator(root) 
root.mainloop() 

Я предполагаю, что часть command = self.fins(9) проблематично, но я не знаю, как решить. Спасибо за любую помощь.

ответ

1

Код передает возвращаемое значение вызова метода, а не самого метода.

Pass функцию обратного вызова, используя как следующее:

self.ins9 = Tk.Button(self.numbuts, text="9", width=3, command=lambda: self.fins(9)) 
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

Спасибо за ваш ответ, но я до сих пор не понимаю, потому что я, возможно, не ясно, не понять основные концепции объектно-ориентированного программирования. Есть ли хорошие ссылки для понимания ООП? (Если возможно, предпочитают корейские книги, но это не имеет значения.) –

+0

@tetori, вам нужно передать функцию обратного вызова, а не возвращаемое значение вызова функции. Это не связано с ООП. – falsetru