且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

按下按钮时调用功能

更新时间:2023-12-02 23:01:28

Qt信号可以具有传递给它们所连接的插槽的参数;例如,将新值作为信号 changed 中的自变量。因此,尽管可以有一个带有参数的插槽,但是您无法定义将信号连接到插槽时的实际值,因为在发出信号时将定义它们的实际值。

Qt signals can have arguments that will be passed to the slots they are connected to; an example would be the new value as an argument in a signal changed. Therefore, while you can have a slot with arguments, you cannot define the actual values of those when connecting the signal to the slot, as they will be defined when emitting signal.

要在连接时定义参数,可以使用一个附加函数,除了使用定义的参数调用原始函数外,该函数什么也没做:

For defining an argument at connect time, you can use an additional function which does nothing but calling the original function with the defined argument:

def wrapper():
    funcion(12)

def funcion(a):
    print "Hola mundo" + str(a)

[...]
btn_brow_4.clicked.connect(wrapper)

作为旁注: wrapper 在此处不使用花括号:该函数不会被调用,而只是作为参数传递给函数 connect 。在您的代码中,您调用了函数 funcion ,该函数不返回任何内容(= None ) ,它已在原始代码中传递给 connect ,从而导致收到错误消息。

As a side note: wrapper does not use braces here: the function is not called, but simply passed as an argument to the function connect. In your code, you called your function funcion, which returns nothing (=None), which was passed to connect in your original code, resulting in the error message you received.

为此更加简洁一些,您还可以使用匿名函数:

To make that a bit cleaner, you can also use an anonymous function:

btn_brow_4.clicked.connect(lambda: funcion(12))

请注意,Qt也提供了这样做的方法,但是(至少对于我)Python变体更易于阅读。

Note that Qt also provides ways of doing this, but (at least for me) the Python variants are easier to read.

编辑:更多信息:> http://eli.thegreenplace.net/2011/04/25/passing-extra-arguments- to-pyqt-slot /