【问题标题】:Enthought Canopy - passing sys.argv from PySide Qt programEnthought Canopy - 从 PySide Qt 程序传递 sys.argv
【发布时间】:2013-10-20 03:51:52
【问题描述】:

我最近一直在研究 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 = ' 行的形式。如果我包含它,我会得到 ​​p>

'RuntimeError: A QApplication 实例已经存在。'

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

【问题讨论】:

  • 您是否正在尝试从 in IPython 终端运行 Qt 程序?如果是这样,命令行参数对您的程序有何意义?
  • 是的 - 谢谢。在过去 3 个小时的大部分时间里查看文档后,我得出了这个结论,在阅读了您的评论后,在 Enthought 也设置的 IDLE shell 中尝试了它,它似乎可以从那里做我想做的事情。我只需要记住在学习 Qt 时使用 IDLE 而不是 Canopy 代码编辑器。
  • 你也可以只从命令行运行:python my_file.py 这样你用什么编写代码都没有关系(任何文本编辑器、IDLE 等)

标签: pyside enthought canopy


【解决方案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 是否已经存在的逻辑,如果存在则使用它,如果不存在则创建它。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多