Frage

Ich brauche ein Kontextmenü der rechten Maustaste an meinem Fenster zu erstellen. Aber ich weiß wirklich nicht, wie das zu erreichen.

Gibt es Widgets für das, oder ich habe es von Anfang an schaffen?

Programmiersprache: Python
Grafische lib: Qt (PyQt)

War es hilfreich?

Lösung

Ich kann nicht für Python sprechen, aber es ist ziemlich einfach in C ++.

erst nach dem Widget Erstellen legen Sie die Politik:

w->setContextMenuPolicy(Qt::CustomContextMenu);

dann schließen Sie das Kontextmenü Ereignis zu einem Schlitz:

connect(w, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));

Schließlich Sie den Steckplatz implementieren:

void A::ctxMenu(const QPoint &pos) {
    QMenu *menu = new QMenu;
    menu->addAction(tr("Test Item"), this, SLOT(test_slot()));
    menu->exec(w->mapToGlobal(pos));
}

das ist, wie Sie es in c ++ zu tun, sollen nicht zu unterschiedlich sein in dem Python-API.

EDIT: nach schaut sich um auf Google, hier ist das Setup Teil meines Beispiel in Python:

self.w = QWhatever();
self.w.setContextMenuPolicy(Qt.CustomContextMenu)
self.connect(self.w,SIGNAL('customContextMenuRequested(QPoint)'), self.ctxMenu)

Andere Tipps

Ein weiteres Beispiel, das zeigt, wie Aktionen verwenden, in einer Symbolleiste und Kontextmenü.

class Foo( QtGui.QWidget ):

    def __init__(self):
        QtGui.QWidget.__init__(self, None)
        mainLayout = QtGui.QVBoxLayout()
        self.setLayout(mainLayout)

        # Toolbar
        toolbar = QtGui.QToolBar()
        mainLayout.addWidget(toolbar)

        # Action are added/created using the toolbar.addAction
        # which creates a QAction, and returns a pointer..
        # .. instead of myAct = new QAction().. toolbar.AddAction(myAct)
        # see also menu.addAction and others
        self.actionAdd = toolbar.addAction("New", self.on_action_add)
        self.actionEdit = toolbar.addAction("Edit", self.on_action_edit)
        self.actionDelete = toolbar.addAction("Delete", self.on_action_delete)
        self.actionDelete.setDisabled(True)

        # Tree
        self.tree = QtGui.QTreeView()
        mainLayout.addWidget(self.tree)
        self.tree.setContextMenuPolicy( Qt.CustomContextMenu )
        self.connect(self.tree, QtCore.SIGNAL('customContextMenuRequested(const QPoint&)'), self.on_context_menu)

        # Popup Menu is not visible, but we add actions from above
        self.popMenu = QtGui.QMenu( self )
        self.popMenu.addAction( self.actionEdit )
        self.popMenu.addAction( self.actionDelete )
        self.popMenu.addSeparator()
        self.popMenu.addAction( self.actionAdd )

    def on_context_menu(self, point):

         self.popMenu.exec_( self.tree.mapToGlobal(point) )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top