【问题标题】:Why slots in PyQt为什么在 PyQt 中使用插槽
【发布时间】:2011-12-13 15:30:18
【问题描述】:

我正在学习 Qt 库。最近我遇到了slots 的概念,到目前为止,我将它们理解为作为对某些事件的反应而执行的函数。是只有这个还是其他?

为什么他们为这么普通的事情选择了这样一个奇特的名字slots?这个词有很多意思。他们打算在 Qt 中考虑 slots 的什么含义?

谢谢

【问题讨论】:

    标签: qt pyqt pyqt4 signals-slots


    【解决方案1】:

    signalslot 这两个术语有些不匹配。

    更好的选择可能是signalreceiver,或者connectorslot

    在 C++ 中,信号只能连接到已定义为槽的函数。尝试将信号连接到普通功能就像尝试将 USB 电缆连接到以太网端口。

    然而,在 PyQt 中,这种区别并不那么重要,因为 任何 可调用对象都可以连接到信号,而不仅仅是预定义的槽。

    话虽如此,PyQt 的最新版本还提供了一个pyqtSlot decorator,可用于定义具有多个不同签名的插槽。一般来说,在 PyQt 中,连接到预定义的插槽(无论是 C++ 还是 PyQt)比连接到普通的 python 可调用对象更有效。

    有关 PyQt 中信号和槽支持的完整详细信息,请参阅reference guide

    【讨论】:

    • 但是是什么让他们选择了slot这个词呢?一些有趣的故事或意外?
    • @xralf。他们想要的slot 的含义可能最接近您提供的字典链接中的第一个:即接收某些东西的孔径:像钥匙孔,或者......(好吧,发挥你的想象力;-)我猜他们可能也一直在寻找与signal同一个字母开头的单词。
    • 这对我来说听起来不合逻辑。为什么函数应该是接收者?函数是在某些信号发生时触发的动作。每个动作都是由某种信号引起的。
    • @xralf。不,信号的发射完全独立于它们是否连接到任何东西;它们不一定会导致任何事情发生。时隙只是一个正在监听广播信号的本地接收器。它采取的行动完全独立于它可能接收到的任何信号(它可能正在监听许多不同的信号,或者没有)。信号的“动作”是它广播的消息;仅此而已。
    【解决方案2】:

    插槽与信号一起使用。您将信号连接到插槽。这是 Qt 本身的核心概念,并不特定于 PyQt。

    Qt 文档有详细信息:Signals & Slots

    这只是一个非常方便的概念,可以在代码中实现相当清晰的层分离。

    插槽本身是普通函数(在 C++ 中),您可以将它们用作普通函数以及“信号接收器”。

    【讨论】:

    • 以下链接图片显示操作员将插件插入不同的插槽以将信号连接到预期的线路可能有助于理解信号和插槽的概念。和这行代码一样,“connect”是一个关键字:self.input_V_bt.clicked.connect(self.file_open_mp4),ar.pinterest.com/pin/160300067968728580/?autologin=true
    猜你喜欢
    • 2013-09-05
    • 2014-02-10
    • 2012-07-13
    • 2013-01-11
    • 2011-06-06
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多