0

以下に示す最小限の例では、コンテキスト メニュー (GUI の白い部分を右クリック) が短時間だけ表示されてから消えます。これは、アプリが IPython (0.13.1) コンソールから開始された場合です。シェルから正常に起動すると、正常に動作します。

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 に次のようにモンキーパッチを適用する必要があります。

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?

~last master (feb 4 f46bfec 08389b4) では OS X で再現できません

于 2013-02-09T19:54:55.650 に答える