2016-10-09 9 views
0

ラズベリーパイのGPIOポートと通信するバックグラウンドでいくつかの追加コードを実行しながら、Webアドレス(この場合はビデオストリーム)を含むGUIウィンドウを作成しようとしています。私は、ウィンドウが動作するようにすることができますが、バックグラウンドコードは、ウィンドウが閉じられたときにのみ開始します。または、コードの順序を逆にすると、GPIOコードはウィンドウが開いているときに機能しなくなります。ここにいくつかのコード例があります。あなたウィンドウを閉じるまでPythonでgtkウィンドウを作成する方法と、バックグラウンドでコードを実行する方法はありますか?

import gtk 

import webkit 

import gobject 

import RPi.GPIO as GPIO 

from time import sleep 

import os 

ip = raw_input("Enter the last 3 digits of IP address: ") 

awesome = "http://192.168.0." + ip + ":9090/stream" 

print awesome 

os.system("sudo uv4l -nopreview --auto-video_nr --driver raspicam --encoding mjpeg --width 640 --height 480 --framerate 30 --server-option '--port=9090' --server-option '--max-queued-connections=30' --server-option '--max-streams=25' --server-option '--max-threads=29'") 

gobject.threads_init() 

win = gtk.Window() 

win.connect('destroy', lambda w: gtk.main_quit()) 

bro = webkit.WebView() 

bro.open(awesome) 

win.add(bro) 

win.show_all() 

gtk.main() 

GPIO.setmode(GPIO.BOARD) 

GPIO.setup(38, GPIO.OUT) 

GPIO.setup(40, GPIO.OUT) 

GPIO.setup(37, GPIO.OUT) 

GPIO.setup(35, GPIO.OUT) 

GPIO.output(38, GPIO.HIGH) 

GPIO.output(40, GPIO.LOW) 

GPIO.output(37, GPIO.LOW) 

GPIO.output(35, GPIO.HIGH) 

sleep(2) 

答えて

1

gtk.main()実行(それは呼び出し「メインループ」または「イベントループ」であり、それはGUIプログラムですべてを行います - 、キー/マウスイベントを取得するウィジェットに送信し、ウィジェットを再描画し、実行する機能ypuボタンを押したときなど)。

(長時間実行する)コードを同時に実行するには、Threadingを使用するか、GUIでTimerクラスを定期的に使用して定期的にコードを実行する必要があります。

+0

ありがとうございました。完全に機能しました。 –

関連する問題