2013-05-21 1 views
0

хорошо Я использую Pyqt4 в Maya2012, чтобы сделать справочный редактор как ui. Я работаю с QtableWidget, чтобы создать список ссылок, и у меня есть подвижки в каждой ячейке. Один из виджетов - это флажок, который выгружает или перезагружает ссылку. Проблема у меня есть, если нажать кнопку прямо в окошке, не имеют клетка выбрана она ничего не делаетОбновление виджетами ячеек в Qtable без выбора ячейки

это мой код:

def listConnections(self): 

    self.pos=self.sender().currentRow() 

    wid = self.list.ref_l.cellWidget(self.pos, 0).children() 

    self.text = self.list.list[self.pos] 
    self.ref() 

    for wt in wid: 
     if type(wt)== type(QCheckBox()): 
      wt.stateChanged.connect(self.changeState) 

     if type(wt)== type(QComboBox()): 
      wt.currentIndexChanged.connect(self.changeType) 

Я вызываю функцию с «itemSlectionChanged », потому что это единственный способ, которым я знал, что могу обнаружить подвиды. Все подвижки сделаны в тот момент, когда я заполняю список.

Есть ли способ сделать то, что я хочу?

Edit:

Это, как я называется функцией

self.list.ref_l.itemSelectionChanged.connect(self.listConnections) 

и это, как я создать все подвиджеты в клетках

def fillList(self): 
    mayaRef = self.findRef() 

    if len(mayaRef)>0: 
     for count in range(0,len(mayaRef)): 

      self.ref_l.insertRow(count) 

      wid=QWidget() 
      cLayout=QHBoxLayout() 
      wid.setLayout(cLayout) 

      checkWid=QCheckBox() 

      nameWid=QLabel() 

      cLayout.addWidget(nameWid) 

      nameWid2=QLabel() 

      cLayout.addWidget(nameWid2) 

      comWid=QComboBox() 
      cLayout.addWidget(comWid) 

      self.ref_l.setCellWidget(count,0,wid) 

self.ref_l мой QTable Widget , это в другом коде, который я звоню с self.list в оригинале

+0

_it ничего не делает_ Является ли changeState слот не называться? Что вы подразумеваете под _Я вызываю функцию с сигналом «itemSlectionChanged»? Вам может быть интересно следующее: http://stackoverflow.com/questions/1063734/pyqt-consolidating-signals-to-a-single-slot –

+0

«Что вы подразумеваете под этим я вызываю функцию с помощью« itemSlectionChanged », сигнал? »- я имею в виду, что я вызываю эту функцию каждый раз, когда я выбираю другой элемент ячейки. И ChangeState вызывается только в том случае, если у меня была выбранная ячейка, но если я нажму кнопку checkButton, она не будет вызвана. –

ответ

0

Вы с hould настроить все ваши соединения сразу после создания флажков в fillList. Каждый элемент связан с путем ссылки. Вы можете использовать QSignalMapper, чтобы сопоставить каждый флажок с контуром, а затем подключить преобразователь сигналов к вашему слоту changeState. Затем формирователь сигналов вызывает этот слот с указанным вами путем.

+0

Thx, я думаю, это должно сработать, но мне нужно изменить часть моего кода для работы. У вас есть пример использования QSignalMapper, я ищу некоторые примеры, но я не могу это полностью понять. –

+0

Что относительно [этого] (http://pysnippet.blogspot.de/2010/06/qsignalmapper-at-your- service.html)? Какую часть вы не поняли? Если у вас возникли проблемы с этим, отправьте код, который у вас есть, возможно, в другом вопросе. –