Button 与tkinter按钮小部件交互的物理按钮
我正在用我的Raspberry Pi和Tkinter GUI制作一个应用程序。应用程序allready运行良好。现在我想使用连接到GPIOS的两个物理按钮,它们与我在应用程序中的两个按钮小部件进行交互。多亏了论坛中的帮助者,我找到了你在代码中看到的方法。但是现在我需要以某种方式禁用物理按钮,以避免在脚本运行时意外按下,就像我可以轻松地使用小部件一样。我在谷歌上搜索了很多,但是我没有找到任何我需要的例子。有人能告诉我获得这个的方法吗。提前谢谢Button 与tkinter按钮小部件交互的物理按钮,button,tkinter,gpio,Button,Tkinter,Gpio,我正在用我的Raspberry Pi和Tkinter GUI制作一个应用程序。应用程序allready运行良好。现在我想使用连接到GPIOS的两个物理按钮,它们与我在应用程序中的两个按钮小部件进行交互。多亏了论坛中的帮助者,我找到了你在代码中看到的方法。但是现在我需要以某种方式禁用物理按钮,以避免在脚本运行时意外按下,就像我可以轻松地使用小部件一样。我在谷歌上搜索了很多,但是我没有找到任何我需要的例子。有人能告诉我获得这个的方法吗。提前谢谢 from Tkinter import * impor
from Tkinter import *
import RPi.GPIO as GPIO
root = Tk()
root.geometry("320x480")
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)
shootdelay = 12 #12
shootinterval = 7#7
shootnumber = 5#12
videodelay = 3
selft = 5
newset = 0
endvideo = 5
intertext = "(D:" + str(shootdelay) + ")(I:" + str(shootinterval) + ")(T:" + str(shootnumber) + ")"
flagselftim = 0
flagvideo = 0
videosetmode = 0
flagsetings = 0
flagcancel = 0
flagnewset = 0
secDelay = shootdelay
secInterv = shootinterval
secSelftim = selft
secvideo = videodelay
remainshots = shootnumber
secshoots = shootnumber - 1
seccompte = 0
readyshoots =
class intervalometer:
def __init__(self, master):
self.textBox = Text(root, height=1, width=1, relief=SUNKEN, font=('arial narrow', 17, 'normal'), bg="green",
fg="white")
self.textBox.grid(row=1, column=1, padx=3, pady=2, sticky=NSEW)
self.textBox.insert(END, "READY")
self.botshoot = Button(root, width=18, font=('arial narrow', 19, 'normal'), text="START",
activebackground="#00dfdf")
self.botshoot.grid(row=4, rowspan=2, column=0, columnspan=2, ipady=15, pady=2, sticky=NSEW)
self.botshoot.configure(command=self.start)
self.botStop = Button(root, heigh=2, font=('arial', 18, 'normal'), text="STOP/RESET", activebackground="red")
self.botStop.grid(row=13, rowspan=3, column=0, pady=1, sticky=NSEW)
self.botStop.configure(state=DISABLED, command=self.stop)
self.botQuit = Button(root, width=3, font=('arial', 18, 'normal'), text="QUIT", activebackground="red",
state=NORMAL)
self.botQuit.grid(row=13, rowspan=3, column=1, pady=1, sticky=NSEW)
self.botQuit.configure(command=self.closewindow)
GPIO.add_event_detect(18, GPIO.RISING, callback=self.start, bouncetime=200)
def start(self, *args, **kwargs):
global flagselftim
self.count = 0
self.cancel_id = None
self.botshoot.configure(state=DISABLED)
self.botStop.configure(state=NORMAL)
self.botQuit.configure(state=DISABLED)
self.start_shoot_delay()
def stop(self):
global secDelay
global secSelftim
global selft
global flagvideo
global videosetmode
global secvideo
global remainshots
global secInterv
global readyshoots
flagvideo = 0
videosetmode = 0
secDelay = shootdelay
secInterv = shootinterval
secvideo = videodelay
selft = 5
secSelftim = selft
remainshots = shootnumber
readyshoots = 1
if self.cancel_id is not None:
self.textBox.after_cancel(self.cancel_id)
self.cancel_id = None
self.textBox.insert(END, 0)
self.textBox.delete("1.0", END)
self.botshoot.configure(text="START")
self.botshoot.configure(state=NORMAL)
self.botStop.configure(state=DISABLED)
self.botQuit.configure(state=NORMAL)
self.textBox.insert(END, "READY")
self.textBox.configure(font=('arial narrow', 17, 'normal'), bg="green", fg="white")
def closewindow(self):
root.destroy()
def start_shoot_delay(self):
global secDelay
if secDelay > 9:
contador = " " + str(secDelay)
else:
contador = " " + str(secDelay)
self.textBox.delete("1.0", END)
self.textBox.configure(font=('arial narrow', 17, 'normal'), bg="red", fg="white")
self.botshoot.configure(state=DISABLED)
if self.count < shootdelay:
self.count += 1
self.textBox.insert(END, contador)
self.cancel_id = self.textBox.after(1000, self.start_shoot_delay)
secDelay -= 1
else:
self.count = 0
secDelay = shootdelay
self.start_shoot_interval()
def start_shoot_interval(self):
global secInterv
if remainshots == shootnumber:
self.start_shootings()
else:
if secInterv > 9:
contador = " " + str(secInterv)
else:
contador = " " + str(secInterv)
self.textBox.delete("1.0", END)
self.textBox.configure(font=('arial narrow', 17, 'normal'), bg="red", fg="white")
if self.count < shootinterval:
self.count += 1
self.textBox.insert(END, contador)
self.cancel_id = self.textBox.after(1000, self.start_shoot_interval)
secInterv -= 1
else:
self.count = 0
secInterv = shootinterval
self.start_shootings()
def start_shootings(self):
global remainshots
global videosetmode
global readyshoots
global secSelftim
global selft
remainshots -=1
if secSelftim <5:
txtremain = "SHOOTING = " + str(1) + "/" + str(1)
else:
txtremain = "REMAINING = " + str(remainshots) + "/" + str(shootnumber)
print "BEEP shoot nr",readyshoots, "av", shootnumber
readyshoots +=1
if remainshots >0:
self.start_shoot_interval()
else:
print "BEEP-BEEP-BEEP : end of roll"
self.etstatus.configure(text="END OF ROLL")
root.update_idletasks()
root.after(500)
readyshoots = 1
selft = 5
self.textBox.insert(END, "READY")
self.textBox.configure(font=('arial narrow', 17, 'normal'), bg="green", fg="white")
self.botshoot.configure(state=NORMAL)
self.botStop.configure(state=DISABLED)
self.botQuit.configure(state=NORMAL)
remainshots = shootnumber
intervalometer(root)
root.mainloop()
从Tkinter导入*
将RPi.GPIO导入为GPIO
root=Tk()
根几何(“320x480”)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN,pull\u up\u down=GPIO.PUD\u up)
射击延迟=12#12
射击间隔=7#7
爆炸次数=5#12
视频延迟=3
selft=5
新闻集=0
endvideo=5
intertext=“(D:+str(shootdelay)+”)(I:+str(shootinterval)+”)(T:+str(shootnumber)+”)”
flagselftim=0
flagvideo=0
videosetmode=0
标记设置=0
flagcancel=0
flagnewset=0
secDelay=shootdelay
secInterv=shootinterv
secSelftim=selft
secvideo=视频延迟
remainshots=射击次数
secshoots=shootnumber-1
seccompte=0
准备拍摄=
等级间隔计:
定义初始(自我,主):
self.textBox=Text(根,高度=1,宽度=1,浮雕=SUNKEN,字体=('arial窄体',17,'normal'),bg=“绿色”,
fg=“白色”)
self.textBox.grid(行=1,列=1,padx=3,pady=2,sticky=NSEW)
self.textBox.insert(结束,“就绪”)
self.botshoot=按钮(根,宽度=18,字体=('arial窄带',19,'normal'),text=“开始”,
activebackground=“#00dfdf”)
self.botshoot.grid(行=4,行span=2,列=0,列span=2,ipady=15,pady=2,粘性=NSEW)
self.botshoot.configure(命令=self.start)
self.botStop=按钮(root,heigh=2,font=('arial',18,'normal'),text=“停止/重置”,activebackground=“红色”)
self.botStop.grid(row=13,rowspan=3,column=0,pady=1,sticky=NSEW)
self.botStop.configure(状态=禁用,命令=self.stop)
self.botQuit=按钮(根,宽度=3,字体=('arial',18,'normal'),text=“退出”,activebackground=“红色”,
状态=正常)
self.botQuit.grid(行=13,行span=3,列=1,pady=1,粘性=NSEW)
self.botQuit.configure(命令=self.closewindow)
GPIO.add\u event\u detect(18,GPIO.RISING,callback=self.start,bouncetime=200)
def启动(自身、*args、**kwargs):
全球旗舰队
self.count=0
self.cancel\u id=None
self.botshoot.configure(状态=禁用)
self.botStop.configure(状态=正常)
self.botQuit.configure(状态=禁用)
self.start\u shot\u delay()
def停止(自):
全局秒延迟
全球秘书处
全局自组织
全球flagvideo
全局视频设置模式
全球secvideo
全球剩余照片
全球安全
全球就绪拍摄
flagvideo=0
videosetmode=0
secDelay=shootdelay
secInterv=shootinterv
secvideo=视频延迟
selft=5
secSelftim=selft
remainshots=射击次数
准备拍摄=1
如果self.cancel\u id不是None:
self.textBox.after\u cancel(self.cancel\u id)
self.cancel\u id=None
self.textBox.insert(结束,0)
self.textBox.delete(“1.0”,结束)
self.botshoot.configure(text=“START”)
self.botshoot.configure(状态=正常)
self.botStop.configure(状态=禁用)
self.botQuit.configure(状态=正常)
self.textBox.insert(结束,“就绪”)
self.textBox.configure(font=('arial窄带',17,'normal'),bg=“绿色”,fg=“白色”)
def关闭窗口(自):
root.destroy()
def启动\拍摄\延迟(自):
全局秒延迟
如果secDelay>9:
contador=“”+str(秒延迟)
其他:
contador=“”+str(秒延迟)
self.textBox.delete(“1.0”,结束)
self.textBox.configure(font=('arial窄带',17,'normal'),bg=“红色”,fg=“白色”)
self.botshoot.configure(状态=禁用)
如果self.count9:
contador=“”+str(secInterv)
其他:
contador=“”+str(secInterv)
self.textBox.delete(“1.0”,结束)
self.textBox.configure(font=('arial窄带',17,'normal'),bg=“红色”,fg=“白色”)
如果self.count
我甚至不认为这是一个问题,因为start方法应该锁定整个程序,包括来自
def start(self, *args, **kwargs):
if self.botshoot['state'] == DISABLED:
print 'already running'
return # abort this method
self.botshoot.configure(state=DISABLED)
# etc ...