【问题标题】:Function not lauching upon key press按键时功能未启动
【发布时间】:2015-03-20 12:46:37
【问题描述】:

所以我在 Python 中有这段代码:

class Chronometre(Frame):                                       

    def __init__(self, parent=None, **kw):
        Frame.__init__(self, parent, kw)
        self._start = 0.0        
        self._elapsedtime = 0.0
        self._running = 0
        self.timestr = StringVar()               
        self.makeWidgets()    

    def _update(self):
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)

    def Start(self):                                                     
        if not self._running:            
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1        

    def Stop(self):                                    
        if self._running:
            self.after_cancel(self._timer)            
            self._elapsedtime = time.time() - self._start    
            self._setTime(self._elapsedtime)
            self._running = 0

    def Reset(self):                             
        self._start = time.time()         
        self._elapsedtime = 0.0    
        self._setTime(self._elapsedtime)

def Clavier(event):
    print(event.keysym)
    if event.keysym == 'a' :
        sw = Chronometre()
        sw.Start()
        sv = Chronometre()
        sv.Start()
    if event.keysym == 'z' :
        sw = Chronometre()
        sw.Stop()
    if event.keysym == 'e' :
        sv = Chronometre()
        sv.Stop()
    if event.keysym == 'r' :
        sw = Chronometre()
        sw.Reset()
        sv = Chronometre()
        sv.Reset()

def main():
    root = Tk()

    root.bind("<Key>",Clavier)

我的一个朋友试图在按键时启动一个功能,但它没有启动该功能。有谁知道为什么会发生这种情况?我知道程序进入了 if 语句,但它不会启动函数。

会不会是因为在班级里?

【问题讨论】:

    标签: python events tkinter


    【解决方案1】:

    您似乎没有实例化您的类,或调用它们的方法。

    if event.keysym == 'a' :
        sw = Chronometre()
        sw.Start()
    

    等等。

    【讨论】:

    • 我添加了括号,但没有帮助
    【解决方案2】:

    首先,您必须运行 Tkinter 主循环才能执行任何操作,例如捕获键

    root.mainloop()
    

    其次,Start() 函数中存在未声明的变量,所以第一次执行时会报错,即 self._running 和 self._elapsedtime。 _setTime() 函数也没有被声明。

    【讨论】:

    • 所有这些事情都已经完成了,我无法添加更多代码,否则会说帖子的代码多于文本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2015-05-25
    相关资源
    最近更新 更多