2011-02-09 86 views
1

我想創建一個python程序如下。 它基本上讀取公交時間表和Tkinter中的文件,它顯示出發列表和到達公交車站及其相應的時間。PYTHON:Tkinter.OptionMenu問題:選項菜單不執行用戶選擇的命令功能

這裏我使用下面的代碼,以便它將更新每個出發或到達停止的時間。但是當我選擇停止它不會調用函數。 我不明白爲什麼。

Tkinter.OptionMenu(self.root,self.Departure,*self.BusStops,command=self.update_departure()).pack() 
Tkinter.OptionMenu(self.root,self.Arrival,*self.BusStops,command=self.update_arrival()).pac 

有人可以投光嗎?

如果不使用類結構,它們的作用相同。

我與Python 2.6版本 進口的Tkinter 進口時間在Windows XP 2002 Service Pack 2的運行

class App(): 
    def __init__(self): 
    self.root = Tkinter.Tk() 
    self.DEBUG_ENABLE = 1 

    self.timetable_file_name = "200_timetable.txt" 
    self.BusStops = list() 
    self.ArrivalTime = list() 
    self.update_timetable() 

    self.Departure = Tkinter.StringVar() 
    self.Arrival  = Tkinter.StringVar() 
    self.StartTime = Tkinter.StringVar() 
    self.EndTime  = Tkinter.StringVar() 

    self.label = Tkinter.Label(text="") 
    self.label.pack() 
    self.update_clock() 

    self.Departure.set(self.BusStops[0]) 
    self.Arrival.set(self.BusStops[-1]) 
    self.StartTime.set("hi") 
    self.EndTime.set("ih") 

    self.OptMenuDep= Tkinter.OptionMenu(self.root,self.Departure,*self.BusStops,command=self.update_departure()).pack() 
    self.OptMenuArr= Tkinter.OptionMenu(self.root,self.Arrival,*self.BusStops,command=self.update_arrival()).pack() 
    self.OptMenuDepTime = Tkinter.OptionMenu(self.root,self.StartTime,"").pack() 
    self.OptMenuArrTime = Tkinter.OptionMenu(self.root,self.EndTime,"").pack() 

    self.root.mainloop() 

    def debug(self,message): 
    if self.DEBUG_ENABLE: 
     print "DEBUG MESSAGE : ", message 

    def update_clock(self): 
    now = time.strftime("%H:%M:%S") 
    self.label.configure(text=now) 
    self.root.after(200, self.update_clock) 

    def update_timetable(self): 
    self.file_desc = open(self.timetable_file_name) 
    for line in self.file_desc.readlines(): 
     self.BusStops.append(line.split('\t')[0]) 
     self.ArrivalTime.append(line.split('\t')[2:-1]) 
    self.file_desc.close() 

    def update_departure(self): 
    self.debug("entering update departure") 
    stop_name = self.Departure.get() 
    count = 0 
    for stop in self.BusStops: 
     if (stop == stop_name): 
      break 
     else: 
      count += 1 
    self.StartTime.set(self.ArrivalTime[count]) 
    count = 0 

    def update_arrival(self): 
    self.debug("entering update arrival") 
    stop_name = self.Arrival.get() 
    count = 0 
    for stop in self.BusStops: 
     if (stop == stop_name): 
      break 
     else: 
      count += 1 
    self.EndTime.set(self.ArrivalTime[count]) 
    count = 0 

# The Main Program Starts Here 

app=App() 

「」 「」 「」 「」 「」 「」 「」 「」 「」 「」 「」 「」」 數據格式如下文件200_timetable.txt

尼斯 - 車站JC Bermond 07:30 07:45 08:00 08:10 08:15 08:30

NICE - J.Médecin/Hôteldes Postes 07:32 07:47 08:02 08:12 08:17 08:3 2

NICE - 格里馬爾迪7點33 7時48分08:03 8點13 8點18分8時33

NICE - 裏沃利7時34 7點49 08:04 8點14 8點19分08: 34

「」 「」 「」 「」 「」 「」 「」 「」 「」 「」 「」 「」 「」 「」

回答

6

當你寫command=self.update_departure()你說的「執行命令的自我。 _update_departure,並使用該調用的結果作爲命令的名稱「。由於self._update_departure()回報None,它一樣做command=None

換句話說,省略() - 你需要傳遞給函數的引用。

+0

嗨,布賴恩,謝謝你的回覆。 – elan116 2011-02-10 08:21:52