如何在运行单独的着色程序代码的同时运行循环



我正试图用tkinter在python中制作一个滑块,并让一个循环不断更新滑块中的数据。在最终产品中,我想要一排发光二极管逐字逐句地点亮滑块。问题是while循环停止了其余代码的工作,并且带有滑块的窗口无法打开。这是我的代码:

import RPi.GPIO as GPIO
from tkinter import * 
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.OUT) 
GPIO.setwarnings(False)
def value():
led.get() 
master = Tk()
master.geometry('100x100')
led = Scale(master, from_=5, to=1) 
led.pack()
while True: 
print(value()) 
mainloop() 

tkinterroot.after(millisecond, function)以一定的延迟运行函数,您可以使用它来重复某些函数,因此它将类似于循环工作,但不会阻止mainloop()

import tkinter as tk # PEP8: `import *` is not preferred
# --- function ---
def value():
print(led.get())
# run again after 1000ms 
master.after(1000, value)
# --- main --
master = tk.Tk()
led = tk.Scale(master, from_=5, to=1) 
led.pack()
# run first time at once
#value()
# or run fist time after 1000ms
master.after(1000, value)
master.mainloop() 

BTW:在after()中,您必须使用不带()和参数的函数名。如果您需要使用参数运行,则master.after(1000, value, arg1, arg2, ...)


PEP 8——Python代码的样式指南


BTW:您可以将函数分配给Scale,它将在"Scale changes value"(缩放更改值(时运行它,并且您不需要循环来检查它。

import tkinter as tk # PEP8: `import *` is not preferred
# --- function ---
def on_change(new_value):
print(led.get())
print(new_value)
# --- main --
master = tk.Tk()
led = tk.Scale(master, from_=5, to=1, command=on_change) 
led.pack()
master.mainloop() 

文档(effbot.org(:Scale

相关内容

最新更新