你如何在python中创建一个gtk窗口,并在后台运行代码?

时间:2016-10-09 05:50:05

标签: python raspberry-pi gtk

我正在尝试创建一个内部包含Web地址的GUI窗口(在本例中为视频流),同时还在后台运行一些与Raspberry Pi上的GPIO端口通信的附加代码。我可以让窗口工作,但后台代码仅在窗口关闭时启动。或者,如果我反转代码的顺序,当窗口打开时GPIO代码停止工作。这是一些示例代码。

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 个答案:

答案 0 :(得分:1)

@using (Html.BeginForm("InsertData", "ControllerName", FormMethod.Post, new { Id = "Form1"})) { @foreach (var item in Model) { @Html.DisplayFor(modelItem => item.item_no) @Html.HiddenFor(model => item.item_no) @Html.DisplayFor(modelItem => item.destination) @Html.HiddenFor(model => item.destination) @Html.DisplayFor(modelItem => item.total_piece) @Html.HiddenFor(model => item.total_piece) <button type="submit">Save</button> } } 一直运行直到你关闭窗口(它是#34;主循环&#34;或&#34;事件循环&#34;它在GUI程序中执行所有操作 - 获取键/鼠标事件,将它发送到小部件,重绘小部件,在按下按钮时运行功能等)。

您必须同时使用gtk.main()运行(长时间运行)代码,或者使用GUI中的某些Threading类来定期执行某些代码。