python - GTK 网络应用程序 : need design pattern

标签 python c gtk pygtk

我打算编写一个带有 GUI 前端的网络应用程序,大概使用 GTK。

我对 GTK(以及一般的 GUI 编程)完全陌生。我目前的猜测是使用两个线程,一个处理网络,另一个运行 GTK 前端。

这是此类问题的常见设计模式还是有更好的替代方案,例如从 GTK 主循环内处理网络?

如果我必须使用两个线程,那么告诉 GTK 线程网络线程有可用数据的最佳方法是什么?

最佳答案

GTK+ 的正常处理方式是将 GUI 放在主线程上,而缓慢的操作则在其他线程上完成。请注意,当您想从另一个线程更新 GUI 时,您必须这样做 inside the GDK lock 。文档提到“对于 Win32 后端,根本不应该从多个线程尝试 GDK 调用”,但可以使用 g_idle_add 来解决这个问题。 ,它将 GUI 线程上的调用排队。

您可以使用异步 GIO 函数(例如 g_input_stream_read_async )进行网络操作,但没有什么可以阻止您使用通用线程库,例如:

gtk.gdk.threads_init()

...

def on_button_clicked(button):
    label.set_text("Doing something...")
    threading.Thread(target=do_something).start()

def do_something():
    time.sleep(2)
    glib.idle_add(label.set_text, "Done")

之前链接的 GDK Threads documentation 中有一个使用 C(Pthreads)的类似示例。 .

关于python - GTK 网络应用程序 : need design pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371453/

相关文章:

python - 在 python pandas 数据帧中添加时间序列强度的廉价方法

c - 在 Mint 中运行 Clutter 示例代码时出错

python - 在 Python 中运行 bash while 循环

python - 如何使用 Python 从 AWS Lambda 检索格式正确的 JSON

python - 多边形面积计算不一致

c - 通过C控制电机

FFmpeg 可以用作库而不是独立程序吗?

c - 如何从 C 控制 Lua 脚本(暂停、恢复、终止)?

c - 如何在GEdit中获得GTK语法高亮?

python - 如何在glade-3中显示2D numpy数组?