[問題]class內呼叫function有沒有括號的差別?

作者: j3234567 (鳥科學先生)   2015-02-27 14:00:41
小弟最近初學python有一個問題有點困惑
我用Tkinter寫了一個小視窗
from Tkinter import *
class radio_practice:
def __init__(self, master):
self.v = IntVar()
self.frame = Frame(master)
self.label = Label(master, text = 'choose a language',
justify = LEFT, font = ('times',26))
self.label.pack(fill = BOTH, side = TOP)
self.botton1 = Radiobutton(master, text = 'python',
variable = self.v, value = 1,
command = self.print_variable)
self.botton1.pack(fill = BOTH, side = LEFT, expand = True)
self.botton2 = Radiobutton(master, text = 'C#', v
ariable = self.v, value = 2,
command = self.print_variable)
self.botton2.pack(fill = BOTH, side = LEFT, expand = True)
def print_variable(self):
print self.v.get()
root = Tk()
program_choose = radio_practice(root)
root.mainloop()
後面那個print_variable function是為了觀察一下self.v會不會被我按下button後改變
的狀況,但是我的command如果 = self.print_variable()程式一跑self.v就會被印出來
而且任憑我怎麼點按鈕也不會顯示出被改過的self.v,但是如果沒有那個括號就可以如
預期看到self.v被改變
想請問在class裡面呼叫function有沒有括號的意義有何不同?
檔案請由此下載:
https://www.dropbox.com/s/mgml6286tfmi5g8/radiobutton.py?dl=0
作者: mail6543210   2015-02-27 19:04:00
command=func是接收一個參數,該參數是一個function事件發生時才call該func,cmd=func()變成呼叫func並將其回傳值None當作command;因print_var回傳None,所以相當於command=None,即事件發生時不處理.簡言之,這是因func可視為物件,並傳遞.

Links booklink

Contact Us: admin [ a t ] ucptt.com