首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

用 PyQt5 和 QML 做了个小工具,,感觉 PyQt 和 QML 的交互比较繁琐

  •  
  •   XIVN1987 · 173 天前 · 1789 次点击
    这是一个创建于 173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    繁琐主要体现在:

    1、Python 中不能使用 QML 中的 id 查找控件,需要用 objectName,,一般这两者值是完全一样的,重复劳动

    ComboBox {
    	id: cmbPort
    	objectName: "cmbPort"
    	Layout.minimumWidth: 100 * 2 + 10 * 2 + lblSer.width
    	model: ports
    }
    

    2、pyqtProperty 不太好用,,搞了好久没用起来,放弃了

    3、Python 中无法直接使用 QML 中的控件,必须用 findObject 在 Python 中再定义一遍

    self.cmbPort = self.win.findChild(QObject, 'cmbPort')
    self.cmbBaud = self.win.findChild(QObject, 'cmbBaud')
    self.cmbData = self.win.findChild(QObject, 'cmbData')
    self.cmbParity = self.win.findChild(QObject, 'cmbParity')
    self.cmbStop = self.win.findChild(QObject, 'cmbStop')
    
    self.txtMain = self.win.findChild(QObject, 'txtMain')
    self.txtSend = self.win.findChild(QObject, 'txtSend')
    
    self.chkRHex = self.win.findChild(QObject, 'chkRHex')
    self.chkWave = self.win.findChild(QObject, 'chkWave')
    self.chkTHex = self.win.findChild(QObject, 'chkTHex')
    self.chkLine = self.win.findChild(QObject, 'chkLine')
    self.chkTime = self.win.findChild(QObject, 'chkTime')
    
    self.btnOpen = self.win.findChild(QObject, 'btnOpen')
    

    4、Python 中不能直接访问 QML 控件的属性,而需要用 property、setProperty 间接访问

    比如 CombBox 控件有 currentText 属性,不能用 self.cmbPort.currentText 访问,而必须用 self.cmbPort.property('currentText')访问

    5、文档资料很少,,没有应用示例

    代码在此:https://github.com/XIVN1987/QmlSer

    运行效果:

    QmlSer

    12 回复  |  直到 2019-01-16 09:26:55 +08:00
        1
    izoabr   173 天前
    好几次想试试 QML,但还是觉得费劲,干脆就还是 designer 直接排了,省事还可视化
        2
    XIVN1987   173 天前
    @izoabr
    是的,现在看来 Qt Widget 还是要比 Qt Quick 用起来更简单、快捷,,希望 Qt 官方的 Python 绑定能简化 Python 和 QML 的交互

    不过 Widget 是给电脑桌面 GUI 设计的,没有考虑手机、平板等设备,,如果想开发手机应用的话可能还是得上 Qt Quick
        3
    TangMonk   173 天前
    PyQt 打包方便吗
        4
    XIVN1987   173 天前
    @TangMonk
    挺简单,,“ pyinstaller -F xxx.py ”一条命令即可,,打包后最小 15M,也还能接受
        5
    chiu   173 天前 via Android
    @XIVN1987 lz 大佬,请教一下,我用 pyinstaller 打包后的 pyqt 应用在 win 下启动十分缓慢,要 40s 左右,运行倒挺流畅的。是什么参数配置不对吗?
        6
    TangMonk   173 天前 via Android
    @XIVN1987 打包速度呢
        7
    kokutou   173 天前 via Android
    @chiu 不打包成单 exe 试试?
        8
    XIVN1987   173 天前
    @TangMonk
    打包速度很快,不到一分钟(我做的程序都比较小)
        9
    XIVN1987   173 天前
    @chiu
    确实比直接运行.py 慢,,我自己用都是.py ,,只有给别人用的时候才打包
    不过好像也没这么慢吧,,可能你的程序功能比较复杂吧,,
        10
    chenqh   172 天前
    为什么要这么专业呢?随便写个 UI 就好了。。
        11
    cyrbuzz   172 天前
    感觉最大的硬伤是 QML 没有文档。
        12
    waterlaw   95 天前
    @XIVN1987 楼主你 github 这个 qml 我 qml.rootContext().setContextProperty('Ser', QmlSer(qml.rootContext(), qml.rootObjects()[0])), 读取不到 rootObjects 啊
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2371 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 12:32 · PVG 20:32 · LAX 05:32 · JFK 08:32
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1