【问题标题】:How in PyQt connect button to a function with a specific parameter?PyQt 如何将按钮连接到具有特定参数的函数?
【发布时间】:2016-10-30 11:30:31
【问题描述】:

这个想法是,当按下按钮时,我需要使用该按钮的文本参数启动一个函数。

# -*- 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_())

【问题讨论】:

    标签: python pyqt pyqt4 qpushbutton


    【解决方案1】:

    像这样连接按钮:

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

    【讨论】:

      【解决方案2】:

      我更喜欢 partial 而不是 lambda,而且我认为它很容易使用。

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

      【讨论】:

        猜你喜欢
        • 2015-07-10
        • 2020-04-27
        • 2017-11-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        相关资源
        最近更新 更多