2016-11-20 5 views
0

Я новичок в PyQt (PySide в майе), пожалуйста, хорошо ко мне :)PyQT КНОПКА подключить создание в цикле

поэтому точка я хочу, чтобы генерировать много кнопки с помощью оператора цикла, что-то simmilar, как показано ниже:

(5 кнопки в окне - полный код - майа)

import PySide.QtCore as qc 
import PySide.QtGui as qg 
class simpleUI(qg.QDialog): 
    def __init__(self): 
     qg.QDialog.__init__(self) 
     self.setWindowTitle('Simple UI') 
     self.btn=[] 
     for x in range(5) : 
      self.btn.append(x) 
      self.btn[x]= qg.QPushButton(self) 
      self.btn[x].setText('this is btn number{0}'.format(x)) 
      self.btn[x].setGeometry(qc.QRect(0,100+(x*20), 100,20)) 
      self.btn[x].clicked.connect(lambda : self.notifyMe(x)) 
    def notifyMe(self,index): 
     print index 
dialog = simpleUI() 
dialog.show() 

, как вы видите, я храню объект кнопки в массиве, но проблема в том, когда я хочу подключить сигнал БТНА с функции NotifyMe , каждая кнопка всегда дает X одинаковое значение (х = 4), то время в button.setText х успеха дают уникальную дополнительную ценность, я не могу понять, почему это ..

ответ

2

Это старая проблема с функцией в lambda - он не получает значения от x, когда вы объявляете функцию, но когда вы нажимаете кнопку. Но когда вы нажимаете кнопку, тогда for-loop заканчивается, и x сохраняет последнее значение - и таким образом все кнопки используют одно и то же значение. Вы должны использовать

lambda a=x: self.notifyMe(a) 
+0

благодарит вас, вы прекрасно объяснили! –

Смежные вопросы