2013-02-09 41 views
0

在下面給出的最小示例中,上下文菜單(右鍵單擊gui的白色部分)只會短暫顯示,然後消失。如果應用程序是從IPython(0.13.1)控制檯啓動的,則是這種情況。當從shell正常啓動時,它應該可以正常工作。如果PySide應用程序正在從IPython交互式控制檯運行,上下文菜單消失

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) 
+1

我相信這是問題[#2380](https://github.com/ipython/ipython/issues/2380),其目的是在當前的git master中修復。你可以檢查一下嗎? – minrk 2013-02-10 06:36:42

+0

是的,雖然問題中提到的那些有問題的對話框(保存,打開)按預期工作,但只有上下文菜單有缺陷。當應用問題#2380中引用的提交[66c77ff392](https://github.com/ipython/ipython/commit/66c77ff392ad7425f8443e1343f5bf8c84a7b5d7)中的差異時,即應用程序被替換爲事件循環時,問題就消失了。現在我不知道要在我的應用程序中做什麼,除了等待0.14? – Bula 2013-02-10 15:10:04

+0

根據您的部署情況,您可以將修補程序直接應用到您的IPython,或者在加載時讓您的應用程序monkeypatch IPython。你需要重寫的是'IPython.lib.inputhook.enable_qt4',它的版本指向你自己的執行正確操作的函數(也可以從IPython master)。 – minrk 2013-02-10 22:05:43

回答

2

相信這是IPython的問題#2380,這應該是固定在當前的git主。

如果你希望你的應用程序來解決此漏洞在0.13,你將不得不使用自己的代碼,以貨物從主版本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之前做的叫法。

1

如何運行應用程序? In[1]: %run file.py

我不能重現它〜上次主(2月4日f46bfec 08389b4)與OS X

相關問題