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

Create signal from input in gtk3, python, raspberry pi

我在 raspberry pi3 上制作了一个 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()

输入仅在执行开始时进行,当我使用循环时 window 冻结。 请帮我。 谢谢。

我的 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()

非常感谢你,theGtknerd。