5

几年前,我为当地社区广播电台编写了一个 python 命令行实用程序。这项工作的目的是使用从谷歌日历获得的元数据来增强无线电流。这意味着任何收听广播电台的人都可以阅读有关当前正在播放的内容以及距离下一个节目开始还有多少分钟的最新信息流。

大多数情况下,这个脚本工作得很好,多年来一直提供良好的服务。

最近我有了一个新要求:这个应用程序的用户希望偶尔停止、启动或重新加载进程(例如,因为调度信息已更改)。我们没有教工作室的每个成员如何使用命令行,而是考虑给这个工具一个简单的 GUI。

由于该应用程序将仅在 Ubuntu 上开发和运行,因此我们选择 Quickly 作为简单的开发框架。它有据可查,并且为开发人员了解该平台提供了较低的负担。

我们希望应用程序的初始设计将包含一个类似浏览器的工具按钮功能区(开始、停止、重新加载)。包含滚动状态消息的大面板。下面会有一个小的状态栏,可以让您深入了解程序的当前内部状态。

作为 GUI 编程的新手,我仍然不确定如何构建 UI:主要的谜团仍然存在:

  1. 什么样的控件应该用于日志消息流动的滚动文本面板。这需要是只读的,但每次生成日志消息时都会更新。我曾计划制作一个自定义 Python 日志处理程序,将任何日志消息重定向到此面板 - 但最简单的方法是什么?

  2. 我现在拥有的脚本在它没有对 time.sleep() 做任何事情时会阻塞 - 这显然对 GUI 没有好处,那么对于一段时间内无事可做的 GUI 应用程序中的进程的正确行为是什么?

  3. 我的进程最初设计为在终端中作为单个线程运行。鉴于我需要它或多或少地像以前一样运行,这是否意味着我应该考虑将 GUI 内容放在工作进程的单独线程上。是否有任何记录在案的模式可以说明如何在 Quickly 框架中执行此操作?

  4. 继续前进 - 有没有一种好方法可以让使用 Quickly 开发的应用程序在 Ubuntu 以外的平台上运行?例如,我能否轻松调整我的应用程序以在任何其他基于 Linux 的操作系统上运行。像 OSX 或 Windows 这样不相关的东西呢?

谢谢!

4

1 回答 1

1
  1. 您可以使用 GtkTextView,只读。也许您可以将其扩展为带有输出的管道。
  2. 您可以在程序空闲时使用idle_add() (在 Glib 中可用)来运行调用方法/函数。
  3. 您可能需要检查如何在 pygtk 中使用线程
  4. PyGTK 是可移植的。Quickly 是一个使用 PyGTK/PyGObject 和一些额外细节创建应用程序的包装器。根据您的代码,保持它的可移植性应该不是很困难。
于 2012-06-25T21:44:31.437 回答