从gtk3,python,raspberry pi的输入创建信号



我在树莓派3上做了一个gui程序,我想从输入(gpio(中获取信号来执行一些命令,例如按下按钮时会生成信号。 我想从输入中获取此信号。 代码是

import time
import gi
import  RPi.GPIO as GPIO
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
class gui:
inputValue = GPIO.input(18)
if inputValue == True:
self.label.set_text("There is input")
def on_window1_destroy(self, object, data=None):
print( "quit with cancel")
Gtk.main_quit()
def on_okButton_clicked(self,button,data=None):
self.label.set_text("Waiting for input")
def __init__(self):
self.gladefile = "2.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("window1")
self.label = self.builder.get_object("Label")
self.label.set_text("Hello")
self.window.show_all()
if __name__ == "__main__":
main = gui()
Gtk.main()

输入仅在执行开始时获取,当我使用循环时,窗口冻结。 请帮助我。 谢谢。

我的PI藏在一个盒子里。这段代码没有经过测试,只是在我的头顶上。告诉我它是否有效。

import time
import gi
import  RPi.GPIO as GPIO
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
class gui:
def pin_callback (self, channel):
print ('pressed')
def on_window1_destroy(self, object, data=None):
print( "quit with cancel")
Gtk.main_quit()
def on_okButton_clicked(self,button,data=None):
self.label.set_text("Waiting for input")
def __init__(self):
self.gladefile = "2.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("window1")
self.label = self.builder.get_object("Label")
self.label.set_text("Hello")
self.window.show_all()
GPIO.add_event_detect(18, GPIO.BOTH, callback=self.pin_callback)
if __name__ == "__main__":
main = gui()
Gtk.main()

我通过将代码编辑为下面的方式来解决它:

import time
import gi
import  RPi.GPIO as GPIO
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
class gui:
def pin_callback (self, channel):
print ('pressed')
self.label.set_text("INput")
def on_window1_destroy(self, object, data=None):
print( "quit with cancel")
Gtk.main_quit()
def on_okButton_clicked(self,button,data=None):
self.label.set_text("Waiting for input")
def __init__(self):
self.gladefile = "m.glade"
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("window1")
self.label = self.builder.get_object("Label")
self.label.set_text("Hello")
self.window.show_all()
if __name__ == "__main__":
main = gui()
GPIO.add_event_detect(18, GPIO.BOTH, callback=main.pin_callback)
Gtk.main()

非常感谢你,Gtknerd。

最新更新