首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中注册屏幕更改?

在python中注册屏幕更改?
EN

Stack Overflow用户
提问于 2017-07-16 16:16:53
回答 1查看 157关注 0票数 0

因此,使用tkinter,我编写了一个简单的程序,每秒钟将画布上所有形状的颜色更改为随机颜色,我正在寻找的是一种方法,可以注册每个屏幕更改,并在一个单独的文件中记录屏幕更改之间的时间。如果可能的话,我还需要在没有太多外部库的情况下这样做。

到目前为止我的代码是:

代码语言:javascript
复制
#!/usr/bin/python -W ignore::DeprecationWarning
import Tkinter
import tkMessageBox
import time
import random


colors = ['DarkOrchid1','chocolate3','gold2','khaki2','chartreuse2','deep pink','white','grey','orange']
top = Tkinter.Tk()
global b
b=0
C = Tkinter.Canvas(top, bg="blue", height=600, width=800)
bcg1=C.create_rectangle(0,0,800,100,fill=random.choice(colors))
bcg2=C.create_rectangle(0,100,800,200,fill=random.choice(colors))
bcg3=C.create_rectangle(0,200,800,300,fill=random.choice(colors))
bcg4=C.create_rectangle(0,300,800,400,fill=random.choice(colors))
bcg5=C.create_rectangle(0,400,800,500,fill=random.choice(colors))
bcg6=C.create_rectangle(0,500,800,600,fill=random.choice(colors))
bcgs=[bcg1,bcg2,bcg3,bcg4,bcg5,bcg6]
coord = 10, 50, 240, 210
rect1=C.create_rectangle(0,0,100,100,fill="green")
rect2=C.create_rectangle(700,500,800,600,fill="green")
rect3=C.create_rectangle(0,500,100,600,fill="green")
rect4=C.create_rectangle(700,0,800,100,fill="green")
def color():
    global b
    global bcgs
    global color
    if b==0:
        C.itemconfig(rect1,fill='green')
        C.itemconfig(rect2,fill='green')
        C.itemconfig(rect3,fill='green')
        C.itemconfig(rect4,fill='green')
        b=1
        count=0
        for i in range(len(bcgs)):
            C.itemconfig(bcgs[i],fill=random.choice(colors))

    elif b==1:
        C.itemconfig(rect1,fill='red')
        C.itemconfig(rect2,fill='red')
        C.itemconfig(rect3,fill='red')
        C.itemconfig(rect4,fill='red')
        b=0
        for i in range(len(bcgs)):
            C.itemconfig(bcgs[i],fill=random.choice(colors))


    top.after(2000, color)

C.pack()
color()
top.mainloop()
EN

回答 1

Stack Overflow用户

发布于 2017-07-16 16:41:49

除非你使用实时操作系统,否则你永远不会得到完美的时机。你可以指望几毫秒就好了。要查看多少,您可以计算time.time()中的差异。为了获得最佳的精度,将after调用移到函数中的第一件事。

再加上其他一些改进:

代码语言:javascript
复制
#!/usr/bin/python -W ignore::DeprecationWarning
import Tkinter
import time
import random
from itertools import cycle

colors = ['DarkOrchid1','chocolate3','gold2','khaki2','chartreuse2','deep pink','white','grey','orange']
rect_colors = cycle(['green', 'red'])

top = Tkinter.Tk()
C = Tkinter.Canvas(top, bg="blue", height=600, width=800)
bcg1=C.create_rectangle(0,0,800,100,fill=random.choice(colors))
bcg2=C.create_rectangle(0,100,800,200,fill=random.choice(colors))
bcg3=C.create_rectangle(0,200,800,300,fill=random.choice(colors))
bcg4=C.create_rectangle(0,300,800,400,fill=random.choice(colors))
bcg5=C.create_rectangle(0,400,800,500,fill=random.choice(colors))
bcg6=C.create_rectangle(0,500,800,600,fill=random.choice(colors))
bcgs=[bcg1,bcg2,bcg3,bcg4,bcg5,bcg6]
coord = 10, 50, 240, 210
rect1=C.create_rectangle(0,0,100,100,fill="green")
rect2=C.create_rectangle(700,500,800,600,fill="green")
rect3=C.create_rectangle(0,500,100,600,fill="green")
rect4=C.create_rectangle(700,0,800,100,fill="green")
rects = [rect1,rect2,rect3,rect4]

last_time = time.time()
def color():
    top.after(2000, color)
    global last_time

    rect_color = next(rect_colors)
    for item in rects:
        C.itemconfig(item, fill=rect_color)
    for item in bcgs:
        C.itemconfig(item, fill=random.choice(colors))

    print("{} seconds since the last run".format(time.time() - last_time))
    last_time = time.time()

C.pack()
color()
top.mainloop()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45130740

复制
相关文章

相似问题

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