2016-10-29 16 views
1

Идея состоит в том, что при нажатии кнопки мне нужно запустить функцию с параметром, который является текстом этой кнопки.Как в PyQt подключить кнопку к функции с определенным параметром?

# -*- coding: utf-8 -*- 
import ftplib 
from PyQt4 import QtGui, QtCore 
import sys 
import socket 

app = QtGui.QApplication(sys.argv) 
window = QtGui.QWidget() 

List = ['one', 'two', 'free'] 

layer = QtGui.QVBoxLayout() 
window.setLayout(layer) 

def btn_clicked(btn): 
    print 'button with text <%s> clicked' %(btn) 

for i in List: 
    button = QtGui.QPushButton(i) 
    layer.addWidget(button) 
    QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), btn_clicked(button.text())) # <--- the problem is here 

window.show() 
sys.exit(app.exec_()) 

ответ

0

Я предпочитаю частичное над лямбда, и я думаю, что будет легко использовать.

from functools import partial 
... 
for i in List: 
    button = QtGui.QPushButton(i) 
    layer.addWidget(button) 
    button.clicked.connect(partial(btn_clicked, str(button.text()))) 
0

Подключение кнопки, как это:

for i in List: 
    button = QtGui.QPushButton(i) 
    layer.addWidget(button) 
    button.clicked.connect(lambda arg, text=i: myfunc(text))