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