0

在下面给出的最小示例中,上下文菜单(右键单击 gui 的白色部分)仅短暂显示,然后消失。如果应用程序从 IPython (0.13.1) 控制台启动,就会出现这种情况。当从 shell 正常启动时,它可以正常工作。

import sys
from PySide import QtGui, QtCore
from IPython.lib.guisupport import get_app_qt4, start_event_loop_qt4

class ContextTestGui(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_ContextTestWindow()
        self.ui.setupUi(self)
        self.ui.treeView.addAction(self.ui.actionCopy)
        self.ui.treeView.addAction(self.ui.actionShow)

class Ui_ContextTestWindow(object):
    def setupUi(self, ContextTestWindow):
        ContextTestWindow.resize(200, 100)
        self.treeView = QtGui.QTreeView(ContextTestWindow)
        self.treeView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
        self.treeView.setMinimumSize(QtCore.QSize(100, 100))

        self.actionCopy = QtGui.QAction("Copy",ContextTestWindow)
        self.actionShow = QtGui.QAction("Show",ContextTestWindow)

def create_window(window_class,**kwargs):
    app = get_app_qt4(sys.argv)
    window = window_class()
    window.show()
    start_event_loop_qt4(app)
    return window

if __name__ == '__main__':
    simgui = create_window(ContextTestGui)
4

2 回答 2

2

我相信这是 IPython Issue #2380,应该在当前的 git master 中修复。

如果您希望您的应用程序在 0.13 中解决此错误,您将必须使用您自己的代码从 master 发布一个版本的 IPython/lib/inputhookqt4.py,并使用以下代码对 IPython 进行monkeypatch:

from IPython.lib import inputhook
inputhook.enable_qt4 = my_enable_qt4

或者,或者,只需覆盖 create_inputhook_qt4

from IPython.lib import inputhookqt4
inputhookqt4.create_inputhook_qt4 = my_create_inputhook_qt4

我希望这两种方法都可以工作,只要你在%gui qt被调用之前就这样做了。

于 2013-02-10T22:47:35.003 回答
1

你如何运行应用程序?In[1]: %run file.py?

我无法使用 OS X 在 ~last master (feb 4 f46bfec 08389b4) 上重现它

于 2013-02-09T19:54:55.650 回答