栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyside (6) 的基础学习笔二:python 下的信号和槽,以及属性

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

pyside (6) 的基础学习笔二:python 下的信号和槽,以及属性

属性(在 CPP 中的 Q_PROPERTY)
#方式一
class Speaker(Qobject):
    @Property(int)
    def pp(self):    
        return self.ppval
    
    @pp.setter
    def pp(self, val):    
        self.ppval = val    
        print(val)

#取值 s.pp = 10, print(s.pp)
#-------------------------------------------------
#方式二
class Speaker(QObject):
    def pp(self):    
        return self.ppval

    @Signal
    def pp_changed(self):    
        pass

    def setPP(self, val):    
        self.ppval = val    
        self.pp_changed.emit()    
        print("---",val)

    name = Property(int, pp, setPP, notify=pp_changed)
    mList = Property(list....) # 使用 list 传递列表
## QML 
Text {   
    id: name    
    text: speaker.tt
}

信号与槽 在 python 定义,在 QML 实例化
#定义槽
@Slot(int)
def val(self, s):
    print("vv:",s)
    
#定义信号,(注意: 信号必须定义在 class 下)   
class TestSignal(QObject):
    test = Signal(int)
    
#连接信息
tt = TestSignal()
tt.test.connect(val)
tt.test.disconnect(val)

#发送信号
tt.test.emit(1)

####################################
#老版本实现方式:与 CPP 方式类似
## python
from PySide6.QtCore import QEnum, QSlot, QObject, QEnum
from enum import Enum

class Speaker(QObject):
    @QEnum
    class Orientation(Enum):
        North, East, South, West = range(4)

    @Slot(float, result=int)
    def val(self, s):
        print("---------d",s)

qmlRegisterType(Speaker, "io.qt.textproperties", 1, 0, "Speaker")

## QML
import io.qt.textproperties
Speaker {
    
    ## 调用枚举
    Component.onCompleted: {
        console.log(Speaker.East)
    }
}

#新版本实现方式

QML_import_NAME = "com.library.name"
QML_import_MAJOR_VERSION = 1
QML_import_MINOR_VERSION = 0 # Optional
@QmlElement
class Speaker(QObject):
    @Slot(float, result=int)
    def val(self, s):
        print("val:", s*3.1)
        
 
import com.library.name

ClassForQml {
   // ...
}
 
直接传递 (通过 context 传递)
# 与 CPP 类似
@QmlElement
class Speaker(QObject):
    @Slot(float, result=int)
    def val(self, s):
        print("val", s * 3.1)
        
x = Speaker()
engine.rootContext().setContextProperty('ddd', x)

# QML
ddd.val(10)

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

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

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