1

我最近一直在看 iPython 的 Enthought 发行版。今天我决定看看我是否可以让一些 Qt GUI progs 运行,并且在做了一些小改动后成功了。简单的例子:

import sys
from PySide import QtGui    # was 'from PyQT4 import QtGui'

# app = QtGui.QApplication(sys.argv)   -- not needed

win = QtGui.QWidget()

win.resize(320, 240)  
win.setWindowTitle("Hello MIT 6X!") 
win.show()

sys.exit()   # was 'sys.exit(app.exec_())'

sys.argv但我希望在某些情况下能够通过。我看到的大多数示例代码都是上面注释掉的'app = '行的形式。如果我包括它,我会得到

“运行时错误:QApplication 实例已存在。”

传递论点的建议表示赞赏。

4

1 回答 1

1

两个单独的问题:

1) 传递命令行参数:您可能已经注意到,当您从 Canopy 编辑器执行“运行”命令时,它所做的只是发出 IPython %run 魔术命令。您可以在 IPython shell 中键入相同的命令,以及您的程序将看到的命令行参数。或者为了节省击键,执行这个自动生成的 Run 命令一次,然后在 IPython shell 中按向上箭头来调用自动生成的 %run 命令,然后在文件名后面输入你的参数,然后按 Enter。你最终会得到一个像这样的 IPython 魔法命令:

%run pathtoprog/myprogrampy p1 p2 p3

我们(Enthought)正在考虑为命令行参数添加一个设置,这样您就可以“使用参数运行”并拥有两全其美的优势。

2) 现有的QApplication:默认情况下,Canopy 的IPython 运行在IPython 的交互式Pylab 模式下,带有Qt 后端。如果你不想要这个,你可以在 Canopy Preferences/Python 菜单中禁用 Pylab 模式,或者将 Pylab 模式更改为 Inline(对于 matplotlib)而不是 Interactive。

为了获得最大的灵活性,通过更多的工作,您可以(如 matplotlib 所做的那样)引入检查 QApplication 是否已经存在的逻辑,如果存在则使用它,如果不存在则创建它。

于 2013-10-20T16:48:51.120 回答