禁用菜单项,除非使用PySid只选择了一个项

2024-04-26 21:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

使用PySide中的^{}时,我想基于^{}选择计数禁用菜单项。如果选择计数正好是1,则应启用“编辑项目”操作,否则应禁用该操作。我该怎么做?在

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Modules
# ------------------------------------------------------------------------------
import sys
from PySide import QtGui, QtCore

# Variables
# ------------------------------------------------------------------------------
listItems = ["A","B","C","D","E","F","G"]

# widget
# ------------------------------------------------------------------------------
class Example(QtGui.QWidget):

    def __init__(self,):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        # formatting
        self.setGeometry(300, 300, 250, 300)
        self.setWindowTitle("Input List")

        # widgets
        self.itemList = QtGui.QListWidget()
        self.itemList.addItems(listItems)
        self.itemList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)

        # context menu
        self.edit_menu = QtGui.QMenu()
        removeItem = self.edit_menu.addAction('Remove Item')
        removeItem.triggered.connect(self.RemoveItem)

        editItem = self.edit_menu.addAction('Edit Item')
        editItem.triggered.connect(self.EditItem)

        self.itemList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.itemList.customContextMenuRequested.connect(self.on_context_menu)
        self.itemList.itemDoubleClicked.connect(self.EditItem)

        # layout
        self.mainLayout = QtGui.QGridLayout(self)
        self.mainLayout.addWidget(self.itemList, 0, 0)
        self.show()       

    def on_context_menu(self, pos):
        self.edit_menu.exec_(self.mapToGlobal(pos))

    def EditItem(self):
        print "Edit Item"

    def RemoveItem(self):
        print "Remove Item"

# Main
# ------------------------------------------------------------------------------
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Tags: importselfexampledefconnectsyscontextitem
1条回答
网友
1楼 · 发布于 2024-04-26 21:16:23

您需要进行一些更改,但是可以通过禁用^{}来完成此操作。在

首先,使您的editItem变量在整个类中都可访问。在

self.editItem = self.edit_menu.addAction('Edit Item')
self.editItem.triggered.connect(self.EditItem)

(为了保持一致性,您也可以对remoteItem执行此操作)

接下来,在on_context_menu中,您需要检查您选择了多少项。然后根据该逻辑启用/禁用菜单选项:

^{pr2}$

示例:

只选择了一个项目:

One item selected

选择了多个项目:

More than one item selected

相关问题 更多 >