我想用tkinter切换按钮并在标签上显示它的变化。在
如果我按下按钮,标签上显示“开”,当我再次按下时,标签上显示“关”
所以我尝试了这些代码,如果我尝试了错误的代码,请帮助我用tkinter编写正确的代码。在
我在组合这些代码时遇到了一个问题
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22,GPIO.IN,up_down=GPIO.PUD_UP)
while(1):
if GPIO.input(22)==1:
if bs == False :
x.set("on")
bs=True
sleep(0.5)
else:
x.set("off")
bs=False
sleep(0.5)
这很好用,但我想把它连接到一个GUI标签上,在上面或外面打印。在
这是tkinter代码
^{pr2}$当我试着把它组合成这样
from Tkinter import *
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)
b=False
def check_button1():
if GPIO.input(7)== 1:
if b == False :
labelText1.set("on")
print"on"
b=True
time.sleep(0.5)
else:
labelText1.set("off")
print"off"
b=False
time.sleep(0.5)
mamdouh.after(10,check_button1)
mamdouh = Tk()
labelText1 = StringVar()
x1 = Label(mamdouh,textvariable=labelText1)
x1.config(font=('Helvetica',25,'bold'))
x1.grid(row=0,column=0)
mamdouh.title("mamdouh")
mamdouh.geometry('1200x700')
mamdouh.after(10,check_button1)
mamdouh.mainloop()
但它不起作用,每次我按下按钮它都是空白的,如果它工作正常,我会放17个按钮
我认为问题在于把这个if statment放在正确的地方,把b变量放在它的正确位置,我认为这个if statment和tkinter之间也有问题,因为我尝试了这个代码,它工作得很完美,但它没有切换按钮,所以我想改变这个,让我们在这里添加这个代码:
from Tkinter import *
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)
def check_button1():
if(GPIO.input(7) == GPIO.LOW):
labelText1.set("on")
else:
labelText1.set("off")
mamdouh.after(10,check_button1)
mamdouh = Tk()
labelText1 = StringVar()
x1 = Label(mamdouh,textvariable=labelText1)
x1.config(font=('Helvetica',25,'bold'))
x1.grid(row=0,column=0)
mamdouh.title("mamdouh")
mamdouh.geometry('1200x700')
mamdouh.after(10,check_button1)
mamdouh.mainloop()
那么我怎样才能在标签上做这个切换按钮呢?在
让我用一个免责声明作为我的回答的开头——我没有覆盆子派,所以不能用真实的东西来验证这一点。为了进行测试,我使用了一个代理类来模拟随机按下按钮。您可能需要根据GPIO接口的工作速度来调整
DELAY
值。在但是,我在靠近顶部的地方放了注释掉的代码,显示了我认为您需要使用的代码。在
下面是在我的Windows计算机上运行的模拟:
您的问题是识别按钮向下和按钮向上事件。您的操作系统鼠标驱动程序为您的鼠标按钮执行此操作。如果GPIO模块没有为您执行此操作,则必须通过比较当前状态与以前的状态来检测这些事件。(我在这里忽略了任何可能需要“去弹跳”按钮的情况。)您正在尝试使用时间。睡觉(5)调用,但不使用时间。睡觉在gui代码中。在
您的驱动程序应该是自包含的,并且独立于除.after所需的根之外的任何tk小部件。你需要多个按钮,你需要自己的类。你的代码是一个起点。Tkinter允许您将命令绑定到按钮事件。类init应该类似地使用启动和/或关闭事件命令(回调)。在
这里有一些未经测试的东西可能会让你开始。在
相关问题 更多 >
编程相关推荐