Python 使用tkinter绑定启动和停止键

Python 使用tkinter绑定启动和停止键,python,button,python-3.x,tkinter,bind,Python,Button,Python 3.x,Tkinter,Bind,如果我想使用按键而不是按钮,我应该如何以及在哪里绑定它们? Tim在一个调整大小的问题上帮助了我,但我的简单代码变得相当复杂。我一直在玩弄python,并且一直都在使用python。我的目标是放弃使用按钮,并绑定一些启动/停止和闪烁键 我应该为这些函数创建一个新类,还是它们基本上可以? 另外,如果我想让它在开始时全屏显示,那么最好是跳转到我的重画类中吗 import tkinter import time class ReDraw(): def __init__(self):

如果我想使用按键而不是按钮,我应该如何以及在哪里绑定它们? Tim在一个调整大小的问题上帮助了我,但我的简单代码变得相当复杂。我一直在玩弄python,并且一直都在使用python。我的目标是放弃使用按钮,并绑定一些启动/停止和闪烁键 我应该为这些函数创建一个新类,还是它们基本上可以? 另外,如果我想让它在开始时全屏显示,那么最好是跳转到我的重画类中吗

import tkinter
import time

class ReDraw():
    def __init__(self):
        self._tk = tkinter.Tk()

        self._myframe = tkinter.Frame(master = self._tk)
        self._myframe.grid(row = 0, column = 0, sticky = tkinter.NSEW)

        self._mycanvas = tkinter.Canvas(master = self._tk, width = 850, height = 400, bg = 'grey', highlightthickness = 0)
        self._mycanvas.grid(row = 0, column = 0, sticky = tkinter.NSEW) 

        self._mycanvas.bind("<Configure>", self._on_resize)

        self._tk.rowconfigure(0, weight = 1)
        self._tk.columnconfigure(0, weight = 1)

        self.fracX = 1
        self.fracY = 1

        self._oval1 = self._mycanvas.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._mycanvas.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._mycanvas.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._mycanvas.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._mycanvas.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')

    def _on_resize(self, event):
        self._mycanvas.delete(tkinter.ALL)
        self.fracX = event.width/850
        self.fracY = event.height/400
        self._oval1 = self._mycanvas.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._mycanvas.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._mycanvas.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._mycanvas.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._mycanvas.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')

def main():
    canvas = ReDraw()
    # Some widgets to the canvas
    def red0(a):
        for i in range(a):
            canvas._mycanvas.delete('oval1')
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval1') 
            canvas._tk.update()
            time.sleep(0.05)            
    def red1(a):
        for i in range(a):
            canvas._mycanvas.delete('oval1')
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval1') 
            canvas._mycanvas.delete('oval2')
            canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval2') 
            canvas._tk.update()
            time.sleep(0.05)                
    def red2(a):
        for i in range(a):
            canvas._mycanvas.delete('oval1')
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval1') 
            canvas._mycanvas.delete('oval2')
            canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval2') 
            canvas._mycanvas.delete('oval3')
            canvas._oval3 = canvas._mycanvas.create_oval(370*canvas.fracX,50*canvas.fracY,480*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval3') 
            canvas._tk.update()
            time.sleep(0.05)                 
    def red3(a):
        for i in range(a):
            canvas._mycanvas.delete('oval1')
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval1') 
            canvas._mycanvas.delete('oval2')
            canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval2') 
            canvas._mycanvas.delete('oval3')
            canvas._oval3 = canvas._mycanvas.create_oval(370*canvas.fracX,50*canvas.fracY,480*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval3') 
            canvas._mycanvas.delete('oval4')
            canvas._oval4 = canvas._mycanvas.create_oval(530*canvas.fracX,50*canvas.fracY,640*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval4') 
            canvas._tk.update()
            time.sleep(0.05)                
    def red4(a):
        for i in range(a):
            canvas._mycanvas.delete('oval5')
            canvas._oval5 = canvas._mycanvas.create_oval(690*canvas.fracX,50*canvas.fracY,800*canvas.fracX,160*canvas.fracY, fill="red", tags = 'oval5') 
            canvas._tk.update()
            time.sleep(0.05)     
    def green(a):
        for i in range(a):
            canvas._mycanvas.delete(tkinter.ALL)
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="green", tags = 'oval1')
            canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="green", tags = 'oval2')
            canvas._oval3 = canvas._mycanvas.create_oval(370*canvas.fracX,50*canvas.fracY,480*canvas.fracX,160*canvas.fracY, fill="green", tags = 'oval3')
            canvas._oval4 = canvas._mycanvas.create_oval(530*canvas.fracX,50*canvas.fracY,640*canvas.fracX,160*canvas.fracY, fill="green", tags = 'oval4')
            canvas._oval5 = canvas._mycanvas.create_oval(690*canvas.fracX,50*canvas.fracY,800*canvas.fracX,160*canvas.fracY, fill="green", tags = 'oval5')
            canvas._tk.update()
            time.sleep(0.05)
    def lights():
        canvas._mycanvas.delete(tkinter.ALL)
        canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval1')
        canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval2')
        canvas._oval3 = canvas._mycanvas.create_oval(370*canvas.fracX,50*canvas.fracY,480*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval3')
        canvas._oval4 = canvas._mycanvas.create_oval(530*canvas.fracX,50*canvas.fracY,640*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval4')
        canvas._oval5 = canvas._mycanvas.create_oval(690*canvas.fracX,50*canvas.fracY,800*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval5')
        canvas._tk.update()
    def lights1(a):
        for i in range(a):
            canvas._mycanvas.delete(tkinter.ALL)
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval1')
            canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval2')
            canvas._oval3 = canvas._mycanvas.create_oval(370*canvas.fracX,50*canvas.fracY,480*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval3')
            canvas._oval4 = canvas._mycanvas.create_oval(530*canvas.fracX,50*canvas.fracY,640*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval4')
            canvas._oval5 = canvas._mycanvas.create_oval(690*canvas.fracX,50*canvas.fracY,800*canvas.fracX,160*canvas.fracY, fill="black", tags = 'oval5')
            canvas._tk.update()
            time.sleep(0.05)
    def amber(a):
        for i in range(a):
            canvas._mycanvas.delete(tkinter.ALL)
            canvas._oval1 = canvas._mycanvas.create_oval(50*canvas.fracX,50*canvas.fracY,160*canvas.fracX,160*canvas.fracY, fill="yellow", tags = 'oval1')
            canvas._oval2 = canvas._mycanvas.create_oval(210*canvas.fracX,50*canvas.fracY,320*canvas.fracX,160*canvas.fracY, fill="yellow", tags = 'oval2')
            canvas._oval3 = canvas._mycanvas.create_oval(370*canvas.fracX,50*canvas.fracY,480*canvas.fracX,160*canvas.fracY, fill="yellow", tags = 'oval3')
            canvas._oval4 = canvas._mycanvas.create_oval(530*canvas.fracX,50*canvas.fracY,640*canvas.fracX,160*canvas.fracY, fill="yellow", tags = 'oval4')
            canvas._oval5 = canvas._mycanvas.create_oval(690*canvas.fracX,50*canvas.fracY,800*canvas.fracX,160*canvas.fracY, fill="yellow", tags = 'oval5')
            canvas._tk.update()
            time.sleep(0.05)
    # tag all of the drawn widgets
    def flashing():
        while True:
            amber(12)
            lights1(10)

    def stop():
        while True:
            canvas._mycanvas.delete(tkinter.ALL)
            lights()
            canvas._tk.update()            

    def start():
        while True:
            canvas._mycanvas.delete(tkinter.ALL)
            lights()
            canvas._tk.update()
            lights1(20)
            red0(35)
            red1(35)
            red2(35)
            red3(35)
            red4(35)
            green(90)
            lights()
            break



    canvas._but1 = tkinter.Button(text="start", command=start)
    canvas._but1.grid(row = 2, column = 0, sticky="w")
    canvas._but2 = tkinter.Button(text="amber", command=flashing)
    canvas._but2.grid(row = 2, sticky="w", padx=(80))
    canvas._but1 = tkinter.Button(text="stop", command=stop)
    canvas._but1.grid(row = 2, column = 0, sticky="w", padx=(40))

if __name__ == "__main__":
    main()

您可以创建带有
tkinter.tk
Frame
的类
Main(tk.Frame)
,以及第二个类
MyCanvas(tkinter.Canvas)
,其中包含所有使用Canvas执行操作的函数


编辑:

这仍然不是我所想的,但至少它起作用了

import Tkinter as tk
import time

class App():

    def __init__(self):

        self._tk = tk.Tk()

        self._tk.rowconfigure(0, weight = 1)
        self._tk.columnconfigure(0, weight = 1)

        self._myframe = tk.Frame(master = self._tk)
        self._myframe.grid(row = 0, column = 0, sticky = tk.NSEW)

        self._mycanvas = MyCanvas(self._tk)

        self._tk._but1 = tk.Button(self._tk, text="start", command=self._mycanvas.start)
        self._tk._but1.grid(row = 2, column = 0, sticky="w")
        self._tk._but2 = tk.Button(self._tk, text="amber", command=self._mycanvas.flashing)
        self._tk._but2.grid(row = 2, sticky="w", padx=(80))
        self._tk._but1 = tk.Button(self._tk, text="stop", command=self._mycanvas.stop)
        self._tk._but1.grid(row = 2, column = 0, sticky="w", padx=(40))

        self._tk.bind("s", self._mycanvas.start)
        self._tk.bind("w", self._mycanvas.stop)

        self._tk.mainloop()


class MyCanvas():

    def __init__(self, parent):

        self.parent = parent

        self._myself = tk.Canvas(master = parent, width = 850, height = 400, bg = 'grey', highlightthickness = 0)
        self._myself.grid(row = 0, column = 0, sticky = tk.NSEW) 

        self.fracX = 1
        self.fracY = 1

        self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')

        self._started = False

        self._myself.bind("<Configure>", self._on_resize)

    def _on_resize(self, event):

        self._myself.delete(tk.ALL)

        self.fracX = event.width/850
        self.fracY = event.height/400

        self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')

    # Some widgets to the canvas
    def red0(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self.parent.update()
            time.sleep(0.05)           

    def red1(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self._myself.delete('oval2')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="red", tags = 'oval2') 
            self.parent.update()
            time.sleep(0.05)

    def red2(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self._myself.delete('oval2')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="red", tags = 'oval2') 
            self._myself.delete('oval3')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="red", tags = 'oval3') 
            self.parent.update()
            time.sleep(0.05)                 

    def red3(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self._myself.delete('oval2')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="red", tags = 'oval2') 
            self._myself.delete('oval3')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="red", tags = 'oval3') 
            self._myself.delete('oval4')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="red", tags = 'oval4') 
            self.parent.update()
            time.sleep(0.05)                

    def red4(self, a):
        for i in range(a):
            self._myself.delete('oval5')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="red", tags = 'oval5') 
            self.parent.update()
            time.sleep(0.05)     

    def green(self, a):
        for i in range(a):
            self._myself.delete(tk.ALL)
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="green", tags = 'oval1')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="green", tags = 'oval2')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="green", tags = 'oval3')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="green", tags = 'oval4')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="green", tags = 'oval5')
            self.parent.update()
            time.sleep(0.05)

    def lights(self):
        self._myself.delete(tk.ALL)
        self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')
        self.parent.update()

    def lights1(self, a):
        for i in range(a):
            self._myself.delete(tk.ALL)
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')
            self.parent.update()
            time.sleep(0.05)

    def amber(self, a):
        for i in range(a):
            self._myself.delete(tk.ALL)
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="yellow", tags = 'oval1')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="yellow", tags = 'oval2')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="yellow", tags = 'oval3')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="yellow", tags = 'oval4')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="yellow", tags = 'oval5')
            self.parent.update()
            time.sleep(0.05)

    # tag all of the drawn widgets
    def flashing(self):
        if not self._started:
            self.amber(12)
            self.lights1(10)
        self._myself.after(100, self.flashing)

    def stop(self, extra=None):
        if self._started:
            self._started = False
            self._myself.delete(tk.ALL)
            self.parent.update()            

    def start(self, extra=None):
        if not self._started:
            self._started = True
            self._myself.delete(tk.ALL)
            self.lights()
            self.lights1(20)
            self.red0(35)
            self.red1(35)
            self.red2(35)
            self.red3(35)
            self.red4(35)
            self.green(90)
            self.lights()

#----------------------------------------------------------------------

if __name__ == "__main__":
    App()
将Tkinter作为tk导入
导入时间
类App():
定义初始化(自):
self.\u tk=tk.tk()
self._tk.rowconfigure(0,权重=1)
self._tk.columnconfigure(0,权重=1)
self.\u myframe=tk.Frame(master=self.\u tk)
self.\u myframe.grid(行=0,列=0,粘性=tk.NSEW)
self.\u mycanvas=mycanvas(self.\u tk)
self.\u tk.\u but1=tk.按钮(self.\u tk,text=“start”,command=self.\u mycanvas.start)
self.\u tk.\u but1.网格(行=2,列=0,sticky=“w”)
self.\u tk.\u but2=tk.按钮(self.\u tk,text=“琥珀色”,command=self.\u mycanvas.flash)
self._tk._but2.网格(row=2,sticky=“w”,padx=(80))
self.\u tk.\u but1=tk.按钮(self.\u tk,text=“stop”,command=self.\u mycanvas.stop)
self._tk._but1.网格(行=2,列=0,sticky=“w”,padx=(40))
self.\u tk.bind(“s”,self.\u mycanvas.start)
self.\u tk.bind(“w”,self.\u mycanvas.stop)
self._tk.mainloop()
类MyCanvas():
定义初始化(自身,父级):
self.parent=parent
self._imf=tk.Canvas(master=parent,width=850,height=400,bg='grey',highlightthickness=0)
self._imf.grid(行=0,列=0,粘滞=tk.NSEW)
self.fracX=1
self.fracY=1
self.\u oval1=self.\u我自己。创建\u oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY,fill=“black”,标记='oval1')
self.\u oval2=self.\u我自己。创建\u oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY,fill=“black”,标记='oval2')
self.\u oval3=self.\u我自己。创建一个椭圆形(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY,fill=“black”,标记='oval3')
self.\u oval4=self.\u我自己。创建\u oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY,fill=“black”,标记='oval4')
self.\u oval5=self.\u我自己。创建一个椭圆形(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY,fill=“black”,标记='oval5')
self.\u start=False
self.\u我自己.bind(“,self.\u在调整大小上)
def_on_resize(自我,事件):
self._自我删除(tk.ALL)
self.fracX=event.width/850
self.fracY=event.height/400
self.\u oval1=self.\u我自己。创建\u oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY,fill=“black”,标记='oval1')
self.\u oval2=self.\u我自己。创建\u oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY,fill=“black”,标记='oval2')
self.\u oval3=self.\u我自己。创建一个椭圆形(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY,fill=“black”,标记='oval3')
self.\u oval4=self.\u我自己。创建\u oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY,fill=“black”,标记='oval4')
self.\u oval5=self.\u我自己。创建一个椭圆形(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY,fill=“black”,标记='oval5')
#画布上的一些小部件
def red0(自身,a):
对于范围(a)中的i:
self.\u我自己。删除('oval1')
self.\u oval1=self.\u我自己。创建\u oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY,fill=“red”,标记='oval1')
self.parent.update()
睡眠时间(0.05)
def red1(自身,a):
对于范围(a)中的i:
self.\u我自己。删除('oval1')
self.\u oval1=self.\u我自己。创建\u oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY,fill=“red”,标记='oval1')
self.\u我自己。删除('oval2')
self.\u oval2=self.\u我自己。创建\u oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY,fill=“red”,标记='oval2')
self.parent.update()
睡眠时间(0.05)
def red2(自身,a):
对于范围(a)中的i:
self.\u我自己。删除('oval1')
self.\u oval1=self.\u我自己。创建\u oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY,fill=“red”,标记='oval1')
self.\u我自己。删除('oval2')
self.\u oval2=self.\u我自己。创建\u oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY,fill=“red”,标记='oval2')
self.\u我自己。删除('oval3')
self.\u oval3=self.\u我自己。创建一个椭圆(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY,fill=“red”,标签='oval3')
self.parent.update()
睡眠时间(0.05)
def red3(自身,a):
对于范围(a)中的i:
self.\u我自己。删除('oval1')
self.\u oval1=self.\u我自己。创建\u oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY,fill=“red”,标记='oval1')
self.\u我自己。删除('oval2')
self.\u oval2=self.\u我自己。创建\u oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY,fill=“red”,标记='oval2')
self.\u我自己。删除('oval3')
self.\u oval3=self.\u我自己。创建一个椭圆(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY,fill=“red”,标签='oval3')
self.\u我自己。删除('oval4')
self.\u oval4=self.\u我自己。创建\u oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY,fill=“red”,标记='oval4')
self.parent.update()
睡眠时间(0.05)
import Tkinter as tk
import time

class App():

    def __init__(self):

        self._tk = tk.Tk()

        self._tk.rowconfigure(0, weight = 1)
        self._tk.columnconfigure(0, weight = 1)

        self._myframe = tk.Frame(master = self._tk)
        self._myframe.grid(row = 0, column = 0, sticky = tk.NSEW)

        self._mycanvas = MyCanvas(self._tk)

        self._tk._but1 = tk.Button(self._tk, text="start", command=self._mycanvas.start)
        self._tk._but1.grid(row = 2, column = 0, sticky="w")
        self._tk._but2 = tk.Button(self._tk, text="amber", command=self._mycanvas.flashing)
        self._tk._but2.grid(row = 2, sticky="w", padx=(80))
        self._tk._but1 = tk.Button(self._tk, text="stop", command=self._mycanvas.stop)
        self._tk._but1.grid(row = 2, column = 0, sticky="w", padx=(40))

        self._tk.bind("s", self._mycanvas.start)
        self._tk.bind("w", self._mycanvas.stop)

        self._tk.mainloop()


class MyCanvas():

    def __init__(self, parent):

        self.parent = parent

        self._myself = tk.Canvas(master = parent, width = 850, height = 400, bg = 'grey', highlightthickness = 0)
        self._myself.grid(row = 0, column = 0, sticky = tk.NSEW) 

        self.fracX = 1
        self.fracY = 1

        self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')

        self._started = False

        self._myself.bind("<Configure>", self._on_resize)

    def _on_resize(self, event):

        self._myself.delete(tk.ALL)

        self.fracX = event.width/850
        self.fracY = event.height/400

        self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')

    # Some widgets to the canvas
    def red0(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self.parent.update()
            time.sleep(0.05)           

    def red1(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self._myself.delete('oval2')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="red", tags = 'oval2') 
            self.parent.update()
            time.sleep(0.05)

    def red2(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self._myself.delete('oval2')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="red", tags = 'oval2') 
            self._myself.delete('oval3')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="red", tags = 'oval3') 
            self.parent.update()
            time.sleep(0.05)                 

    def red3(self, a):
        for i in range(a):
            self._myself.delete('oval1')
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="red", tags = 'oval1') 
            self._myself.delete('oval2')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="red", tags = 'oval2') 
            self._myself.delete('oval3')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="red", tags = 'oval3') 
            self._myself.delete('oval4')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="red", tags = 'oval4') 
            self.parent.update()
            time.sleep(0.05)                

    def red4(self, a):
        for i in range(a):
            self._myself.delete('oval5')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="red", tags = 'oval5') 
            self.parent.update()
            time.sleep(0.05)     

    def green(self, a):
        for i in range(a):
            self._myself.delete(tk.ALL)
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="green", tags = 'oval1')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="green", tags = 'oval2')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="green", tags = 'oval3')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="green", tags = 'oval4')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="green", tags = 'oval5')
            self.parent.update()
            time.sleep(0.05)

    def lights(self):
        self._myself.delete(tk.ALL)
        self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
        self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
        self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
        self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
        self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')
        self.parent.update()

    def lights1(self, a):
        for i in range(a):
            self._myself.delete(tk.ALL)
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="black", tags = 'oval1')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="black", tags = 'oval2')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="black", tags = 'oval3')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="black", tags = 'oval4')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="black", tags = 'oval5')
            self.parent.update()
            time.sleep(0.05)

    def amber(self, a):
        for i in range(a):
            self._myself.delete(tk.ALL)
            self._oval1 = self._myself.create_oval(50*self.fracX,50*self.fracY,160*self.fracX,160*self.fracY, fill="yellow", tags = 'oval1')
            self._oval2 = self._myself.create_oval(210*self.fracX,50*self.fracY,320*self.fracX,160*self.fracY, fill="yellow", tags = 'oval2')
            self._oval3 = self._myself.create_oval(370*self.fracX,50*self.fracY,480*self.fracX,160*self.fracY, fill="yellow", tags = 'oval3')
            self._oval4 = self._myself.create_oval(530*self.fracX,50*self.fracY,640*self.fracX,160*self.fracY, fill="yellow", tags = 'oval4')
            self._oval5 = self._myself.create_oval(690*self.fracX,50*self.fracY,800*self.fracX,160*self.fracY, fill="yellow", tags = 'oval5')
            self.parent.update()
            time.sleep(0.05)

    # tag all of the drawn widgets
    def flashing(self):
        if not self._started:
            self.amber(12)
            self.lights1(10)
        self._myself.after(100, self.flashing)

    def stop(self, extra=None):
        if self._started:
            self._started = False
            self._myself.delete(tk.ALL)
            self.parent.update()            

    def start(self, extra=None):
        if not self._started:
            self._started = True
            self._myself.delete(tk.ALL)
            self.lights()
            self.lights1(20)
            self.red0(35)
            self.red1(35)
            self.red2(35)
            self.red3(35)
            self.red4(35)
            self.green(90)
            self.lights()

#----------------------------------------------------------------------

if __name__ == "__main__":
    App()