QT python将参数传递给函数

2024-05-05 01:15:27 发布

您现在位置:Python中文网/ 问答频道 /正文

此代码的工作原理:

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\'u username中介绍的内容(它不会崩溃,但不会打印类似于如果它没有将两个参数都发送给函数get_fb_token)的内容???在

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


Tags: fromimportselftokengetsignalfbconnect
1条回答
网友
1楼 · 发布于 2024-05-05 01:15:27

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

^{pr2}$

相关问题 更多 >