使用部分函数传递值

时间:2014-11-15 05:15:36

标签: python pyqt pyqt4 partial signals-slots

我正在使用部分函数将值传递给函数参数,点击QPushButton。

self.SearchButton1 = QPushButton("Search")
self.SearchStudent1 = QLineEdit()

以下是它的连接方式:

self.connect(self.SearchButton1, SIGNAL("clicked()"),
             partial(self.Searching, self.SearchStudent1.text()))

被调用函数如下:

def Searching(self, num):
    print self.SearchStudent1.text()
    print num

我不确定为什么num没有被打印,而self.SearchStudent1.text()在按下“搜索”时正确打印出来。按钮。

请告知我是否遗漏了任何内容。

修改

无论如何,我可以使用部分函数传递QLineEdit对象并使用它:

self.connect(self.SearchButton1, SIGNAL("clicked()"),
             partial(self.Searching, self.SearchStudent1))

def Searching(self, num):
    print self.SearchStudent1.text()
    print num.text() # works fine

1 个答案:

答案 0 :(得分:0)

partial function将缓存传递给它的参数。因此,如果在连接信号时行编辑为空,则始终将空字符串发送到被调用的方法。 (在使用repr进行调试时使用print始终是个好主意,这样您就可以轻松查看""None等输出值。

如果您希望在单击按钮时将当前文本发送到插槽,则可以使用lambda功能,如下所示:

self.connect(self.SearchButton1, SIGNAL("clicked()"),
             lambda: self.Searching(self.SearchStudent1.text())

或更简单:

self.SearchButton1.clicked.connect(
    lambda: self.Searching(self.SearchStudent1.text())