我正在尝试创建一个内部包含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)
答案 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
类来定期执行某些代码。