2013-10-20 18 views
1

我最近一直在寻找iPython的Enthought发行版。今天我决定查看是否可以运行一些Qt GUI程序,并在做出较小更改后成功。简单的例子:Enthought Canopy - 从PySide Qt程序中传递sys.argv

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: A QApplication instance already exists.'

传递参数的建议表示赞赏。

+0

你是否试图从IPython终端内的*运行Qt程序?如果是这样,命令行参数对您的程序有什么意义? –

+0

是的 - 谢谢。我在花了大部分时间阅读文档之后花了很多时间才得出这个结论,并且在阅读您的评论之后,在Enthought也设置的IDLE shell中尝试了它,并且它似乎按照我想要的那样做。我只需要记住在学习Qt时使用IDLE而不是Canopy代码编辑器。 – user2541559

+0

你也可以直接运行命令行:'python my_file.py'这样不管你写什么代码(任何文本编辑器,空闲,任何) –

回答

1

两个不同的问题:

1)传递命令行参数:正如你可能已经注意到,当你从天幕编辑器做的“运行”命令,它是所有问题的IPython%运行魔法命令。您可以在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)而不是交互式。

为了获得最大的灵活性,您可以(如matplotlib所做的那样)引入逻辑来检查QAp​​plication是否已经存在,如果存在则使用它,如果不存在则创建它。