python - 如何在 tkinter 中更改帧,使其保持活动状态几秒钟
问题描述
我正在使用树莓派进行颜色检测器项目。流程是:程序启动时会显示一个欢迎屏幕,一旦颜色传感器检测到颜色,它就会将我们带到下一个屏幕输入数字。由于使用的颜色传感器是 TCS3200,它不断地为我们提供价值,很多时候它碰巧检测到颜色,即使没有颜色并且需要进入下一个屏幕。
我想要做的是,每当检测到一种颜色并进入下一个屏幕时,该屏幕应该活动 15 秒,并且应该再次返回欢迎屏幕。
我尝试使用 time.sleep,但每当我发出它时,帧提升永远不会发生,10 秒后它会显示欢迎屏幕。
我把我的代码放在这里
import RPi.GPIO as GPIO
import time
from tkinter import *
import tkinter.font as tkFont
from PIL import Image, ImageTk
def raise_frame(frame):
frame.tkraise()
#Declare Global Variables
root = None
dfont = None
welcome = None
msg = None
value = None
number = ""
#GPIO pins
aux_vcc = 16
s2 = 5
s3 = 6
signal = 26
NUM_CYCLES = 10
#Fulscreen or windowed
fullscreen = False
def number_e():
global number
num = number.get()
number.set(num)
print(num)
num=""
number.set(num)
raise_frame(PageTwo)
def num_get(num):
current = e.get()
e.delete(0, END)
e.insert(0, str(current) + str(num))
def delt():
temp = e.get()[:-1]
e.delete(0, END)
e.insert(0, temp)
def clr():
e.delete(0, END)
def cancel():
raise_frame(welcome)
#toggle fullscreen
def toggle_fullscreen(event=None):
global root
global fullscreen
fullscreen = not fullscreen
root.attributes('-fullscreen', fullscreen)
resize()
#go into windowed mode
def end_fullscreen(event=None):
global root
global fullscreen
fullscreen = False
root.attributes('-fullscreen', False)
resize()
#resize font based on screen size
def resize(event=None):
global dfont
global welcome
new_size = -max(12, int((welcome.winfo_height() / 10)))
dfont.configure(size=new_size)
def setup():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(signal, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(aux_vcc, GPIO.OUT)
GPIO.output(aux_vcc, GPIO.HIGH)
GPIO.setup(s2, GPIO.OUT)
GPIO.setup(s3, GPIO.OUT)
print("\n")
def endprogram():
GPIO.cleanup()
def loop():
temp = 1
global root
global value
global number
global num
GPIO.output(s2,GPIO.LOW)
GPIO.output(s3,GPIO.LOW)
time.sleep(0.3)
start = time.time()
for impulse_count in range(NUM_CYCLES):
GPIO.wait_for_edge(signal, GPIO.FALLING)
duration = time.time() - start #seconds to run for loop
red = NUM_CYCLES / duration #in Hz
print("red value - ",red)
GPIO.output(s2,GPIO.LOW)
GPIO.output(s3,GPIO.HIGH)
time.sleep(0.3)
start = time.time()
for impulse_count in range(NUM_CYCLES):
GPIO.wait_for_edge(signal, GPIO.FALLING)
duration = time.time() - start
blue = NUM_CYCLES / duration
print("blue value - ",blue)
GPIO.output(s2,GPIO.HIGH)
GPIO.output(s3,GPIO.HIGH)
time.sleep(0.3)
start = time.time()
for impulse_count in range(NUM_CYCLES):
GPIO.wait_for_edge(signal, GPIO.FALLING)
duration = time.time() - start
green = NUM_CYCLES / duration
print("green value - ",green)
time.sleep(0.5)
if ((red >= 3600 and red <= 4299) and (blue >= 3900 and blue <= 5850) and (green >= 5150 and green <= 6300)):
raise_frame(PageOne)
elif ((red >= 3600 and red <= 4999) and (blue >= 4199 and blue <= 4800) and (green >= 4500 and green <= 5950)):
raise_frame(PageOne)
elif ((red >= 4400 and red <= 4699) and (blue >= 4150 and blue <= 5000) and (green >= 4100 and green <= 4950)):
raise_frame(PageOne)
elif ((red >= 3600 and red <= 4399) and (blue >= 5000 and blue <= 5600) and (green >= 3900 and green <= 4499)):
raise_frame(PageOne)
else:
pass
root.after(500, loop)
#create the window
root = Tk()
root.title("Screen")
root.geometry('800x480')
welcome = Frame(root)
PageOne = Frame(root)
PageTwo = Frame(root)
for frame in (welcome, PageOne, PageTwo):
frame.grid(row=6, column=3, sticky='news')
value = DoubleVar()
msg = StringVar()
number = StringVar()
dfont = tkFont.Font(size=-6)
myfont = tkFont.Font(size=20)
mfont = tkFont.Font(size=12)
wel = Label(welcome, text="Welcome.", font=myfont)
wel.grid(row=1, column=1, padx=0, pady=0)
wel.place(x=50, y=320)
load = Image.open("banner.png")
load = load.resize((800,250), Image.BICUBIC)
render = ImageTk.PhotoImage(load)
img = Label(welcome, image=render)
img.image = render
img.place(x=0, y=0)
img.grid(row=0, column=0)
Label(PageOne, text="Enter your Mobile Number to get reward: ", font=myfont).grid(columnspan=3, row=0, column=0, padx=100, pady=50)
e = Entry(PageOne, textvariable=number, width=30, font=myfont)
e.grid(columnspan=3, row=1, column=0, padx=150, pady=15)
Button(PageOne, text='1', command=lambda:num_get(1), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=2, column=0)
Button(PageOne, text='2', command=lambda:num_get(2), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=2, column=1)
Button(PageOne, text='3', command=lambda:num_get(3), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=2, column=2)
Button(PageOne, text='4', command=lambda:num_get(4), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=3, column=0)
Button(PageOne, text='5', command=lambda:num_get(5), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=3, column=1)
Button(PageOne, text='6', command=lambda:num_get(6), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=3, column=2)
Button(PageOne, text='7', command=lambda:num_get(7), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=4, column=0)
Button(PageOne, text='8', command=lambda:num_get(8), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=4, column=1)
Button(PageOne, text='9', command=lambda:num_get(9), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=4, column=2)
Button(PageOne, text='0', command=lambda:num_get(0), borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=5, column=1)
Button(PageOne, text='Delete', command=delt, borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=5, column=2)
Button(PageOne, text='Clear', command=clr, borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=5, column=0)
Button(PageOne, text='Enter', bg='#0052cc', fg='#ffffff', command=number_e, borderwidth=5, relief=RAISED, height=1, width=20, font=myfont).grid(row=6, column=0, columnspan=2)
Button(PageOne, text='Cancel', command=cancel, borderwidth=5, relief=RAISED, height=1, width=10, font=myfont).grid(row=6, column=2)
Label(PageTwo, text=" ", font=myfont).grid(row=0, column=1, padx=5, pady=5)
Label(PageTwo, text="Thank You", font=myfont).grid(row=1, column=1, padx=150, pady=200)
root.bind('<F11>', toggle_fullscreen)
root.bind('<Escape>', end_fullscreen)
root.bind('<Configure>', resize)
setup()
root.after(1000, loop)
raise_frame(welcome)
toggle_fullscreen()
root.mainloop()
解决方案
推荐阅读
- java - Adjust classpath / change spring version in azure databricks
- mysql - Counting a column's first name
- r - 如何使用 plotly 抑制警告?
- python - 插值和增加 netfdf 数据的空间分辨率
- javascript - 当在反应js上触发onClick方法时,有什么方法可以在一定的时间间隔内播放声音
- haskell - 如何在 IHP 脚本中重用 IHP 类?
- ruby-on-rails - 在rails中打印从1到25的选定月份日期和上个月26到月末日期
- javascript - 将数据拆分为单独的值并在 Vuejs 中的 span 标签中分配它们
- python - 无法使用 Python 从网站下载文件
- forms - 自定义表单在 Outlook 中不与 O365 同步