python - QT python连接传递参数给函数

标签 python qt user-interface pyside

为什么这段代码有效:

from PySide.QtCore import *
from PySide.QtGui import *
import sys
from functools import partial

import pyside # my code generated by QT Design

class MainDialog(QMainWindow, pyside.Ui_MainWindow):

    def __init__(self, parent=None):
        super(MainDialog,self).__init__(parent)
        self.setupUi(self)


        self.connect(self.Connect_buttom, SIGNAL("clicked()"), partial(self.get_fb_token, "aaaaa","bbbbbb"))


    def get_fb_token(self,email,passwd): 
        print email
        print passwd


app = QApplication(sys.argv)
form = MainDialog()
form.show()
app.exec_()

然后打印 aaaaa 和 bbbbb

但是如果我改变:

self.connect(self.Connect_buttom, SIGNAL("clicked()"), partial(self.get_fb_token, "aaaaa","bbbbbb"))

self.connect(self.Connect_buttom, SIGNAL("clicked()"), partial(self.get_fb_token, self.FB_username.text() ,self.FB_password.text()))

它不会打印我在文本框 FB_password 和 FB_username 中介绍的内容(它不会崩溃,但它不会打印任何东西,就像它没有向函数 get_fb_token 发送两个参数一样)? ??

** 示例来自:http://www.blog.pythonlibrary.org/2013/04/10/pyside-connecting-multiple-widgets-to-the-same-slot/ 我正在使用 QT 和 pyside

最佳答案

partial 对象是在您定义连接时创建的,而不是在触发事件时创建的。这意味着 FB_username.text() 在连接时被调用,所以它总是打印你在设计器中设置的内容。

要实现您想要的效果,您必须使用一个在调用时检索这些值的函数。 最简单的解决方案是:

from PySide.QtCore import *
from PySide.QtGui import *
import sys

import pyside # my code generated by QT Design

class MainDialog(QMainWindow, pyside.Ui_MainWindow):

    def __init__(self, parent=None):
        super(MainDialog,self).__init__(parent)
        self.setupUi(self)

        # use new-style signals & slots!
        self.Connect_buttom.clicked.connect(self.get_fb_token)

    def get_fb_token(self):
        email = self.FB_username.text()
        password = self.FB_password.text()

        print email
        print passwd


app = QApplication(sys.argv)
form = MainDialog()
form.show()
app.exec_()

如果出于某种原因,您不想修改 get_fb_token,您可以像这样使用 lambda:

self.Connect_buttom.clicked.connect(lambda: self.get_fb_token(self.FB_username.text(), self.FB_password.text()))

关于python - QT python连接传递参数给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24360133/

相关文章:

python - 为什么在 python 中有 .discard(element) 时使用 .remove(element)?

Python如何读取行以及如何输出新行

Qt 项目中的 C++ 语法

c++ - 为什么字体中的图标上方有很多空格?

ios - 为 iOS 编译 Qt(UIKit 灯塔)第 2 部分

java - 试图运行 GUI 应用程序,但 GUI 从未出现

java - 类似于 GenericDialog/ADM 的东西

android - 使每部手机的用户界面通用

python - Numba nopython 模式不能接受二维 bool 索引

python - 如何将队列字典传递给 multiprocessing.Process