2017-07-20 8 views
0

私はraspberry pi3でguiプログラムを作成しました。ボタンを押すとシグナルが生成されるようなコマンドを実行するためにinput(gpio)からシグナルを取得します。 この信号を入力から取得したいのですが。 コードがgtk3、python、raspberry 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() 

ある入力は実行のみとするとき、私は、ウィンドウがフリーズループを使用しての最初に取られています。 私を助けてください。ありがとう。

+0

どのようなコードがありますか? [ここ](http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-p-and-rpi-gpio-part-2)のようなチュートリアルを読んでいますか? – theGtknerd

+0

コードが追加されます。入力は実行の開始時にのみ取得され、ループを使用するとウィンドウがフリーズします。 –

答えて

0

私は怒鳴るように、コードを編集して、それを解決:

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、ありがとうございました。

1

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

これは結果です。トレースバック(最新の最後の呼び出し): ファイル "/home/pi/Desktop/m.py"、行10、 クラスgui: ファイル "/ home/pi/Desktop/m。 GPIO.add_event_detect(18、GPIO.BOTH、callback = self.pin_callback) NameError:名前 'self'が定義されていません –

+0

@MohamedGadこれで編集したバージョンがこれを行う別の方法になるはずです。 – theGtknerd

関連する問題