更新时间: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 /