2017-07-20 2 views
0

Ich habe ein GUI-Programm auf Raspberry Pi3 gemacht und ich möchte ein Signal vom Eingang (gpio) bekommen, um einige Befehle auszuführen, wenn eine Taste gedrückt wird, wird ein Signal erzeugt. Ich möchte dieses Signal aber von einem Eingang bekommen. der CodeErzeuge Signal vom Eingang in gtk3, python, Himbeer 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: 
    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() 

Die Eingabe nur zu Beginn der Ausführung genommen wird und, wenn ich eine Schleife, um die Fenster gefriert verwenden. bitte hilf mir. danke.

+0

Welchen Code haben Sie? Hast du Tutorials wie [hier] (http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-2) gelesen? – theGtknerd

+0

Code wird hinzugefügt. Die Eingabe wird nur am Anfang der Ausführung genommen und wenn ich eine Schleife benutze, friert das Fenster ein. –

Antwort

0

Ich löste es als Gebrüll den Code und bearbeite:

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

Vielen Dank, theGtknerd.

1

Mein PI ist in einer Kiste verstaut. Dieser Code wird nicht getestet, nur aus dem Kopf. Sag mir, ob es funktioniert.

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() 
+0

Dies ist das Ergebnis. Traceback (letzter Anruf zuletzt): Datei "/home/pi/Desktop/m.py", Zeile 10, in Klasse gui: Datei "/ home/pi/Desktop/m. py ", Zeile 13, in gui GPIO.add_event_detect (18, GPIO.BOTH, callback = self.pin_callback) NameError: Name 'self' ist nicht definiert –

+0

@MohamedGad Die bearbeitete Version sollte jetzt eine andere Möglichkeit sein, dies zu tun. – theGtknerd