V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
NxnXgpuPSfsIT
V2EX  ›  Python

pyqt 模仿暴雪聊天框

  •  1
     
  •   NxnXgpuPSfsIT ·
    littlecodersh · 2016-11-28 20:04:32 +08:00 · 4301 次点击
    这是一个创建于 2711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近写了一个通过 pyqt 模仿暴雪界面的项目,旨在给予学习 pyqt 的同行一些借鉴。

    这里是项目地址:github

    配色、样式、配图皆来源于暴雪,但具体的项目实现存在一些个人的取巧。

    希望这个项目可以帮助你更快的完成界面的搭建或者入门 pyqt 。

    由于 QtWebKit 的变化,目前 pyqt5.6 及以上的版本不能被支持。

    目前该项目仅完成了聊天窗口的部分,其余部分将陆续更新。

    简单入门实例

    在将本项目下载到本地后,你可以这样运行:

    python demo.py
    

    运行后,你将看到这样的界面:

    chatroom-demo

    方法说明

    下面我们就演示程序对如何使用做一个简单的讲解:

    #coding=utf8
    import sys
    
    from blizzardui.pyqt.QtGui import (
        QApplication, QPixmap)
    
    from blizzardui.widgets import Chatroom
    
    # 常规的启动动作就不多加说明
    app = QApplication(sys.argv)
    # 两个 NickName 定义了来往的用户昵称
    # headImage 应当为一个 46*46 的 QPixmap ,当然如果过大也会被自动截取
    mainWindow = Chatroom(toNickName=u'好友 A', fromNickName='LittleCoder',
        headImage=QPixmap('src/chatroom/images/header/default_image.png'))
    mainWindow.show()
    
    # 当你输入一些内容并使用 Enter 时,将会调用该方法
    def fn(msg):
        mainWindow.add_msg(msg)
        print(unicode(msg))
    mainWindow.messageReceived.connect(fn)
    
    # 通过 add_msg ,可以向历史记录中加入消息
    # 如果 isSend 设为 False ,将会判定为是收到的消息
    mainWindow.add_msg('yo' * 50)
    mainWindow.add_msg('yo', isSend=False)
    mainWindow.add_msg('yo')
    # 通过 set_footer ,可以设置页尾的内容
    mainWindow.set_footer(u'最后登录')
    
    sys.exit(app.exec_())
    

    关于

    Q: 为什么不使用 QWebEngineView ?

    A: 我没能找到一个很好的办法让 QWebEngineView 快速启动,所以会出现初始化时闪烁以及无法加入消息的问题。

    如果有什么问题或者建议都可以在这个Issue和我讨论

    7 条回复    2016-11-29 12:51:33 +08:00
    edsgerlin
        1
    edsgerlin  
       2016-11-28 20:09:07 +08:00 via Android
    WebEngineView 可以先不 show 出来,等接到 load 完了的 signal 再 show 。
    Tianqi
        2
    Tianqi  
       2016-11-28 20:13:22 +08:00 via iPhone
    沒記錯的話,戰網客戶端就是用 Qt 開發的
    NxnXgpuPSfsIT
        3
    NxnXgpuPSfsIT  
    OP
       2016-11-28 20:16:30 +08:00
    @Tianqi 是的
    NxnXgpuPSfsIT
        4
    NxnXgpuPSfsIT  
    OP
       2016-11-28 20:17:11 +08:00
    @edsgerlin 主要是主界面不 show , WebEngineView 不载入 html ,有什么解决方案吗?
    edsgerlin
        5
    edsgerlin  
       2016-11-28 20:34:28 +08:00 via Android
    @NxnXgpuPSfsIT WebEngine 不显式初始化的话,会依赖所属的 widget 来初始化。你试试先 QtWebEngine::initialize();
    NxnXgpuPSfsIT
        6
    NxnXgpuPSfsIT  
    OP
       2016-11-29 09:12:31 +08:00
    @edsgerlin 多谢,我这里直接用的是 QtWebEngineWidgets 里面的 QtWebEngineView ,我看看有没有类似的解决方案。
    patrickstar
        7
    patrickstar  
       2016-11-29 12:51:33 +08:00
    可惜我安装的是 pyqt 5.7 了,学习一下子
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2258 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:10 · PVG 14:10 · LAX 23:10 · JFK 02:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.