栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PyQt正确使用emit()和pyqtSignal()

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PyQt正确使用emit()和pyqtSignal()

您可以定义自己的插槽(任何可调用的python)并将其连接到信号,然后从该插槽中调用其他插槽。

class Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def printLabel(self, str):        print(str)    def logLabel(self, str):        '''log to a file'''        pass    @QtCore.pyqtSlot(int)    def on_sld_valueChanged(self, value):        self.lcd.display(value)        self.printLabel(value)        self.logLabel(value)    def initUI(self):        self.lcd = QLCDNumber(self)        self.sld = QSlider(Qt.Horizontal, self)        vbox = QVBoxLayout()        vbox.addWidget(self.lcd)        vbox.addWidget(self.sld)        self.setLayout(vbox)        self.sld.valueChanged.connect(self.on_sld_valueChanged)        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('Signal & slot')

另外,如果要定义自己的信号,则必须将它们定义为类变量

class Example(QWidget):    my_signal = pyqtSignal(int)

用于

pyqtSignal
定义将
emit
在该信号上显示的对象类型的参数,因此在这种情况下,您可以执行

self.my_signal.emit(1)

可以重新实现发射,以将特定的信号值发送到插槽功能。还不清楚我为什么需要从以前存在的信号方法中发送不同的值。

通常,您不应该发出内置信号。您只需要发出定义的信号即可。定义信号时,可以定义具有不同类型的不同签名,插槽可以选择它们要连接到的签名。例如,您可以这样做

my_signal = pyqtSignal([int], [str])

这将定义一个具有两个不同签名的信号,并且一个插槽可以连接到任何一个

@pyqtSlot(int)def on_my_signal_int(self, value):    assert isinstance(value, int)@pyqtSlot(str)def on_my_signal_str(self, value):    assert isinstance(value, str)

实际上,我很少过载信号签名。通常,我只创建两个具有不同签名的单独信号,而不是使同一信号过载。但它的存在和PyQt的支持,因为Qt拥有被重载这样的信号(如

QComboBox.currentIndexChanged



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号