首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PYTHON:Tkinter.OptionMenu问题:选项菜单不对用户选择执行命令功能

PYTHON:Tkinter.OptionMenu问题:选项菜单不对用户选择执行命令功能
EN

Stack Overflow用户
提问于 2011-02-10 00:24:41
回答 1查看 4.5K关注 0票数 1

我正在尝试创建一个python程序,如下所示。它基本上读取一个带有公交车时刻表的文件,在Tkinter中,它显示出发列表和到达公交站及其对应的时间。

在这里,我使用了下面的代码,这样它就可以更新每个出发或到达站点的时间。但当我选择停止时,它不会调用函数。我不明白为什么。

代码语言:javascript
复制
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版import Tkinter import time。

代码语言:javascript
复制
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的数据格式如下

尼斯-车站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

尼斯- Grimaldi 07:33 07:48 08:03 08:13 08:18 08:33

尼斯- Rivoli 07:34 07:49 08:04 08:14 08:19 08:34

EN

回答 1

Stack Overflow用户

发布于 2011-02-10 01:26:16

当您编写command=self.update_departure()时,您是在说“执行命令self._update_departure,并使用该调用的结果作为命令的名称”。因为self._update_departure()返回None,所以它与执行command=None相同

换句话说,省略() --您需要传递一个对函数的引用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4947592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档