2014-10-02 78 views
0

我有一个UI,它由几个QPushButton和一个QLineEdit组成,目前我无法'更新'附加到QPushButton上的这个QMenu中的内容。假设,如果在我的场景中已经有2个摄像头,并且在执行我的UI时,通过按下这个setCameraBtn,我将获得列表中的2个摄像头。但是,如果我在UI尚未关闭的情况下创建新相机,那么如何让我的QMenu在新相机中读取,如“实时更新”?更新QMenu'live'中的内容

我试图创建另一个函数,其中重新读取场景摄像机和retabulate类似于我已经写在createConnections的一个camLs以及一个连接,但它似乎并不在被读取。

camLs = [] 

class orientCameraUI(QDialog): 
    def __init__(self, parent=None): 
     ... 
     ... 

    def initUI(self): 
     ... 
     ... 

    def createConnections(self): 
     self.connect(self.orientToCamBtn, SIGNAL('clicked()'), self.orientToCam) 

    def camMenu(self): 

     allCams = [cam for cam in cmds.listRelatives(cmds.ls(cameras=1),parent=1) if cam not in ['front','persp','side','top']] 
     camLs.extend(allCams) 

     menu = QMenu("menu", self.setCameraBtn) 

     for item in camLs: 
      menu.addAction(QAction(item, menu)) 
     self.setCameraBtn.setMenu(menu) 

     menu.triggered.connect(self._camSelected) 

    def _camSelected(self, action): 
     self.currentCamTxt.setText(action.text()) 
+0

尝试使它''self.menu = QMenu(“menu”,self.setCameraBtn)'而不是'menu = Q ....'。 – 2014-10-07 09:38:16

+0

请原谅我,但是在“自我”中加入你提到的会产生任何分歧的线路? – dissidia 2014-10-07 09:52:59

+0

顺便说一句,我有点能够通过在'createConnections'中添加self.connect(self.setCameraBtn,SIGNAL(“pressed()”),self.camMenu)来实现我的菜单,将需要按两次按钮才能获得最新消息,但这种'lagginess'让我发疯,尽管 – dissidia 2014-10-07 09:55:47

回答

0

这可以很容易地通过发射QThread而不是定期调用更新摄像头方法的UI来检查场景中的当前摄像头,并将它们与UI已经注册的摄像头进行比较。如果在摄像机中添加,更改或删除,则会更新菜单以反映它​​。

另一种解决方案是使用scriptJob

+0

我对'QThread'不是很熟悉,但是假如我打算使用它,这是否意味着我需要重新处理与QMenu有关的部分?然后再次,我试图使整个事情与当前的编码,我有... – dissidia 2014-10-07 02:46:46

+0

没有任何神奇的旗帜,如果设置可以使这项工作。也就是说,您将不得不编写新的代码来检查相机的变化,并且几乎不会改变现有的QMenu结构。 – 2014-10-07 09:37:35