我最近一直在关注iPython的Enthought发行版。今天我决定看看我是否可以运行一些Qt GUI程序并在进行微小更改后成功。简单的例子:
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 = '
行的形式。如果我加入它,我会
'RuntimeError:QApplication实例已经存在。'
赞美传递论点的建议。
答案 0 :(得分:1)
两个单独的问题:
1)传递命令行参数:正如您可能已经注意到的,当您从Canopy编辑器执行“运行”命令时,它所做的就是发出IPython%run magic命令。您可以在IPython shell中键入相同的命令,以及程序将看到的命令行参数。或者要保存击键,请执行一次自动生成的“运行”命令,然后按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是否已经存在,如果它存在则使用它,如果不存在则创建它。