我正在尝试创建一个 python 程序,如下所示。 它主要是读取包含公交时刻表的文件,并在 Tkinter 中显示出发列表和到达公交车站以及相应的时间。
我在这里使用以下代码,以便它会更新每个出发或到达站点的时间。但是当我选择停靠点时,它不会调用函数。 我不明白为什么。
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
有人可以解释一下吗?
如果不使用类结构,同样有效。
我在 windows xp 2002 service pack 2 和 python 2.6 版本上运行 导入 Tkinter 导入时间
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的数据格式如下
NICE - J.C. Bermond 站 07:30 07:45 08:00 08:10 08:15 08:30
NICE - J. Médecin/Hôtel des Postes 07:32 07:47 08:02 08:12 08:17 08:32
尼斯 - 格里马尔迪 07:33 07:48 08:03 08:13 08:18 08:33
尼斯 - 里沃利 07:34 07:49 08:04 08:14 08:19 08:34
""""""""""""""""""""""""""""""
最佳答案
当您编写 command=self.update_departure()
时,您是在说“执行命令 self._update_departure,并将该调用的结果用作命令的名称”。由于 self._update_departure()
返回 None
,这与执行 command=None
换句话说,省略 ()
-- 您需要传递对函数的引用。
关于PYTHON:Tkinter.OptionMenu 问题:option menu不执行command函数给用户选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947592/