2014-10-02 74 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