2016-11-28 18 views
1

python3 및 PyQt4를 사용하고 있습니다. 나는 배열에 따라 다른 액션을 가진 메뉴를 만들고 싶다. 각자가 배열에 저장된 해당 정보를 변수에 저장하기를 원합니다. 다양한 수의 이벤트를 만드는 것은 불가능 해 보입니다. 그렇다면 어떻게 활성화 된 작업에 따라 다른 작업을 수행하는 이벤트를 만들 수 있습니까? 은 '내 코드이야 그건 :파일에 따라 QActions 및 해당 신호를 만드는 방법

def buildLoadSettings(self): 
    self.settings = array 
    for i in range(len(self.settings)): 
     exec("self.settings" + str(i) + " = QtGui.QAction('" + self.settings[i][0] + "', self)") 
     exec("self.loadMenu.addAction(self.settings" + str(i) + ")") 

을 나는 이벤트와 액션을 각각 연결하고 마지막으로 저장하려면 "self.settings을 [I] [1]"변수 "설정"로 설정합니다. 나의 초보자 질문에 대해 유감스럽게 생각합니다.

+0

귀하의 질문을 설명하십시오 제발 – eyllanesc

+0

난 변수 번호와 이벤트를 알고, 어떤 행동에 의해 호출 된 여러 작업을 만들고 싶었어요, 그래서 당신은 해당 데이터를 ses. 에쿠 모로는 정확한 해결책을 제시했다. –

답변

1

달성하려는 목표를 명확하게 밝히지는 않았지만 도움이되는 몇 가지 API가 있습니다. 현재와 ​​같이 못생긴 exec 전화를 사용할 필요가 없습니다.

  1. 사용 QAction.setData() 각 작업과 일부 데이터를 연결할 :

    for item in self.settings: 
         action = QtWidgets.QAction(item[0], self) 
         action.setData(item[1]) 
         self.loadMenu.addAction(action) 
    
  2. 사용 QMenu.actions() 오히려 만드는 속성보다는 행동에 액세스 할 수 :

    다음

    은 몇 가지 아이디어입니다
    action = self.loadMenu.actions()[2] 
        print((action.text(), action.data())) 
    
  3. alo QMenu.triggered()에 t 한 곳에서의 모든 작업을 처리하기 :

    self.loadMenu.triggered.connect(self.handleLoadMenu) 
    
    def handleLoadMenu(self, action): 
        # "action" is the action that was clicked 
        text = action.text() 
        data = action.data() 
        print('Action Clicked: ("%s", %s)' % (text, data)) 
    

PS :

당신은/세트 동적 특성을 얻을 사용하려면 getattrsetattr :

# self.settings2 = action 
    setattr(self, "settings%s" % 2, action) 
    # action = self.settings2 
    action = getattr(self, "settings%s" % 2)