Pyside2信号连接 定义方法的方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyside2信号连接 定义方法的方式相关的知识,希望对你有一定的参考价值。
参考技术A 定义方法的方式pyqt 复写槽 方法名 on+ 控件名 + 信号(参数) ,不需要装饰
在pyside2 中复写槽 方法名一样 on+ 控件名 + 信号(参数) ,需要装饰,需要导入QtCore
eg1 :
eg2:对button_A 装饰,clicked 有两种,一种是clicked() 这里默认是没有参数,另一种clicked(bool),布尔的
btn_A槽函数装饰没有传入参数, 这里点击会输出, None
btn_A槽函数装饰 有传入参数 , 这里点击会输出, False
核心算法与界面分离
单独写一个core,导入到界面中
自定义信号
1放在自定义的类下
2外部有函数核心
3__init__下信号关联核心函数
4重写btn_A 的槽函数,emit 自定义信号
eg:
自定义信号传入多个参数
1,在my_signal = QtCore.Signal(这里填入参数)
2,外部的func_custom 传入参数(agrA, agrB, agrC)
3,在装饰器里面槽函数里的发射方法里填入具体的要发射的具体参数
在 PySide 中连接 QTableView 信号,参数错误?
【中文标题】在 PySide 中连接 QTableView 信号,参数错误?【英文标题】:Connecting QTableView signal in PySide, wrong parameters? 【发布时间】:2013-01-11 02:56:14 【问题描述】:我有一个创建窗口和树视图的类。创建树视图的代码非常简单,在 init 方法中:
tableView = QTableView()
tableView.setModel(model)
tableView.clicked.connect(self.foo)
其中 'foo' 是应该接受回调的函数(同一类的成员)的名称。该函数的签名如下:
def foo(something):
print something
据我所知(确实很少),'something' 参数应该是 QModelIndex 的一个实例,但事实并非如此。对变量执行 print(something) 表明我已将 foo(...) 发送到窗口类。我在这里想念什么?我认为这是正确的方法,基于:
http://qt-project.org/wiki/Signals_and_Slots_in_PySide
有什么想法吗? 感谢您的帮助。
【问题讨论】:
忘记了self
? (即def foo(self, something):
)
是的,就是这样。谢谢!
@Avaris 您能否添加该评论作为答案,以便解决此问题?
【参考方案1】:
方法的第一个参数是隐式传递的实例本身,通常命名为self
。在您的版本中,something
成为实例,而不是传递的参数。您的方法应如下所示:
def foo(self, something):
print something
附带说明,通常在将参数传递给不接受任何参数的方法时会出错。喜欢:
class Foo(object):
def bar(something):
print something
f = Foo()
f.bar(1)
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: bar() takes exactly 1 argument (2 given)
但在 Qt 中,您可以将信号连接到接受较少参数的插槽。 Qt 将调用没有该参数的插槽。因此,尽管clicked
信号通过QModelIndex
,您仍然可以将此信号连接到不接受参数的方法(例如您的foo
)。结果,你会得到这个无声的“错误”。
【讨论】:
所以,我想在 Python 中,你应该了解你自己...我会看到自己的。再次感谢您的建议!以上是关于Pyside2信号连接 定义方法的方式的主要内容,如果未能解决你的问题,请参考以下文章