我正在尝试在python中编写应用程序以使用串口控制电机。这一切都在CLI情况下很好地工作并且通常是稳定的。但我想知道在这个代码库之上添加GUI是多么简单?
我假设会有更多代码,但是有一种简单的方法可以检测GTK这样的东西,所以它只在GTK出现时应用了代码吗?
此外,通常在Python中创建GUI:最好是从代码中保留少量GUI细节并使用类似GTK的基于XML的方法(使用gtk.glade.XML()函数)?是否有其他GUI工具包采用与Glade / XML /“代码爆炸”方法类似的方法?
感谢您的任何建议。
安迪
答案 0 :(得分:10)
有没有一种简单的方法来检测像GTK这样的东西,所以它只在GTK出现时才应用代码?
首先,将您的应用分成3个独立的模块。
实际工作:foo_core.py
。
导入foo_core
的CLI模块。称之为foo_cli.py
。
导入foo_core
的GUI模块。称之为foo_gui.pyw
。
foo_cli
模块看起来像这样。
import foo_core
import optparse
def main():
# parse the command-line options
# the real work is done by foo_core
if __name__ == "__main__":
main()
foo_gui
模块可能如下所示。
import foo_core
import gtk # or whatever
def main()
# build the GUI
# real work is done by foo_core under control of the GUI
if __name__ == "__main__":
main()
这通常就足够了。如果他们想要CLI或GUI,可以信任人们自己决定。
如果您想让人感到困惑,可以编写一个foo.py
脚本来执行以下操作。
try:
import foo_gui
foo_gui.main()
except ImportError:
import foo_cli
foo_cli.main()
答案 1 :(得分:1)
这取决于您想要的那种互动。
如果您想要一个真正的GUI,您可以使用humble dialog模式将GUI内容与程序逻辑分离,并使用文本“GUI”来处理CLI。这也有很好的副作用,GUI的大部分都可编程测试。
另一种方法是使用自己的对象分配sys.stdin和sys.stout,这会将程序IO重定向到GUI(这不适用于非python库)。这意味着GUI中的交互可能性较少,但编程工作量要少得多。
答案 2 :(得分:0)
我不建议在XML中使用GUI。所有XML都为您提供了一种描述布局的迷你语言。为什么在你可以拥有python的全部功能时使用迷你语言?
至于检测GTK,我不建议这样做。而是添加命令行参数以确定是否创建GUI(例如:myprogram -g)。然后,在GUI模式下创建桌面快捷方式或命令行别名变得很容易,同时仍然可以从任何终端使用命令行工具。
但是,您确实希望将GUI代码与执行实际工作的位分开。给自己一个包含所有业务逻辑的类,然后让GUI和CLI都访问该对象以便工作。答案 3 :(得分:0)
嗯,我所做的是我有一个唯一的bash脚本,包含以下内容:
if [ "${0}" == "mcm" ]; then
/usr/bin/python ${inst_dir}/terminal/mcm-terminal.py ${@}
else
/usr/bin/python ${inst_dir}/gtk/mcm-gtk.py &
fi
然后我创建了两个符号链接:/ usr / sbin / mcm和/ usr / bin / mcm-gtk
工作非常好。