1) После нажатия одной из кнопок в списке я бы хотел запустить один метод MainWindow. Я хотел бы иметь возможность прочитать источник события там (распознать нажатую кнопку)
Вы можете получить доступ к источнику события, используя QObject.sender () . Но, как показывают инструкции, часто лучше использовать QSignalMapper или делать вещи более объектно-ориентированным способом.
2) Второе решение - запустить метод, определенный в классе ButtonX.
Посмотрите внимательно на то, что вы ввели для последнего аргумента первого вызова подключения:
self.getButton(0, 0).buttonMethod()
Выше будет оцениваться getButton
с параметрами 0, 0
, а затем для этого объекта вызовет метод buttonMethod
. Поэтому, если buttonMethod
не возвращает метод, вы используете возвращаемое значение buttonMethod
в качестве последнего параметра для вызова подключения. Если этот метод возвращает функцию, это нормально.
Скорее, я бы ожидал увидеть что-то вроде следующего:
self.getButton(0, 0).buttonMethod # note no parenthesis at end
Взгляните на каталог примеров PyQt, поставляемый с PyQt, так как они продемонстрируют точный синтаксис и послужат хорошим примером.
Вот один маленький пример:
class MW(QMainWindow):
def __init__(self, *args)
QMainWindow.__init__(self, *args)
layout = QHBoxLayout(self)
self.b1 = QPushButton("Button1")
self.b2 = QPushButton("Button2")
layout.addWidget(self.b1)
layout.addWidget(self.b2)
self.connect(self.b1, SIGNAL("clicked()"), self.buttonWasPressed)
self.connect(self.b2, SIGNAL("clicked()"), self.buttonWasPressed)
def buttonWasPressed(self):
print "button %s was pressed" % self.sender()