你如何在 python 中创建一个 gtk window 并且在后台有代码 运行?

How do you create a gtk window in python and also have code running in the background?

我正在尝试创建一个 GUI window,里面有一个网址(在这种情况下是一个视频流),同时在后台还有一些额外的代码 运行 与 GPIO 端口通信在 Raspberry Pi 上。我可以让 window 工作,但后台代码仅在 window 关闭时启动。或者,如果我颠倒代码的顺序,GPIO 代码将在 window 打开时停止工作。这是一些示例代码。

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)

gtk.main() 运行s 直到你关闭 window(它是调用 "main loop" 或 "event loop" 并且它在 GUI 程序中做所有事情 - 得到 key/mouse 事件,将它发送到小部件,重绘小部件,运行 当你按下按钮时函数等)。

您必须同时使用 Threading 到 运行 (long-运行ning) 代码或在 GUI 中使用一些 Timer class定期执行一些代码。