弹出菜单和菜单项显示项目列表

0 投票
1 回答
924 浏览
提问于 2025-04-18 16:57

我创建了一个按钮,当点击这个按钮时,它会弹出一个菜单,显示已经创建的摄像头列表,还有一个透视摄像头(顶部、正面和侧面摄像头不会显示)。

虽然这个功能看起来能正常工作,但每当我创建一个新的摄像头时,就会出现一个错误,提示 # TypeError: Too many objects or values. #,这个错误指向了 cmds.popupMenu(a) 这一行。

有没有更好的方法来解决这个问题呢?

class orientCameraUI(QDialog):
    def __init__(self, parent=None):
        super(orientCameraUI, self).__init__(parent)
        self.resize(300,225)
        self.initUI()
        self.createConnections()

    def initUI(self):
        self.setWindowTitle('OrientControl UI')

        self.getCurrentCamBtn = QPushButton('Get current CAM')
        gridLayout = QGridLayout()
        gridLayout.addWidget(self.getCurrentCamBtn, 0, 1)
        self.setLayout(gridLayout)

    def createConnections(self):
        self.connect(self.getCurrentCamBtn, SIGNAL('clicked()'), self.getCurrentCam)

    def getCurrentCam(self):
        # createdCams - camera1, camera2 etc.
        createdCams = cmds.ls(cameras = True, visible = True)
        getPersp = cmds.ls("persp")
        cmds.popupMenu( button=1 )
        cmds.popupMenu(createdCams)
        cmds.popupMenu(getPersp)

1 个回答

1

看看你这段代码:

cmds.popupMenu( button=1 )
cmds.popupMenu(createdCams)
cmds.popupMenu(getPersp)

第一行代码创建了一个弹出菜单。(button=1的意思是,当你用左键点击时菜单会打开,而不是默认的右键点击。)

不过,你还没有往菜单里添加任何菜单项。再次调用popupMenu并传入一个项目列表,其实是在尝试创建一个新的菜单,而不是新的项目

你需要的是menuItem。但是每个创建的摄像机都需要一个不同的菜单项。你不能把一组摄像机传给一个menuItem命令。你应该用for循环来创建你需要的菜单项数量:

cmds.popupMenu(button=1) # creates the menu
for cam in createdCams:  # loop over createdCams assigning to cam one at a time
    cmds.menuItem(cam)   # creates one menu item for cam
cmds.menuItem(getPersp)  # create one menu item for persp

可以查看关于popupMenumenuItem的文档了解更多信息。

撰写回答