سؤال

أحتاج إلى إنشاء قائمة سياق على النقر بزر الماوس الأيمن في نافذتي. لكنني حقا لا أعرف كيفية تحقيق ذلك.

هل هناك أي وحدات يدوثة لذلك، أو لا بد لي من خلقها من البداية؟

لغة البرمجة: بيثون
ليب الرسوم البيانية: كيو تي (PYQT)

هل كانت مفيدة؟

المحلول

لا أستطيع التحدث عن بيثون، لكنه سهل إلى حد ما في C ++.

أولا بعد إنشاء عنصر واجهة المستخدم، قمت بتعيين السياسة:

w->setContextMenuPolicy(Qt::CustomContextMenu);

ثم تقوم بتوصيل حدث قائمة السياق إلى فتحة:

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

أخيرا، يمكنك تنفيذ الفتحة:

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

هكذا تفعل ذلك في C ++، لا ينبغي أن تكون مختلفة جدا في بيثون API.

تعديل: بعد النظر حولك على Google، إليك جزء الإعداد من مثالي في Python:

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

نصائح أخرى

مثال آخر الذي يوضح كيفية استخدام الإجراءات في قائمة شريط الأدوات وقائمة السياق.

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) )
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top