推荐学习书目
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 · Nov 28, 2016 · 4833 views
    This topic created in 3454 days ago, the information mentioned may be changed or developed.

    最近写了一个通过 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 replies    2016-11-29 12:51:33 +08:00
    edsgerlin
        1
    edsgerlin  
       Nov 28, 2016 via Android
    WebEngineView 可以先不 show 出来,等接到 load 完了的 signal 再 show 。
    Tianqi
        2
    Tianqi  
       Nov 28, 2016 via iPhone
    沒記錯的話,戰網客戶端就是用 Qt 開發的
    NxnXgpuPSfsIT
        3
    NxnXgpuPSfsIT  
    OP
       Nov 28, 2016
    @Tianqi 是的
    NxnXgpuPSfsIT
        4
    NxnXgpuPSfsIT  
    OP
       Nov 28, 2016
    @edsgerlin 主要是主界面不 show , WebEngineView 不载入 html ,有什么解决方案吗?
    edsgerlin
        5
    edsgerlin  
       Nov 28, 2016 via Android
    @NxnXgpuPSfsIT WebEngine 不显式初始化的话,会依赖所属的 widget 来初始化。你试试先 QtWebEngine::initialize();
    NxnXgpuPSfsIT
        6
    NxnXgpuPSfsIT  
    OP
       Nov 29, 2016
    @edsgerlin 多谢,我这里直接用的是 QtWebEngineWidgets 里面的 QtWebEngineView ,我看看有没有类似的解决方案。
    patrickstar
        7
    patrickstar  
       Nov 29, 2016
    可惜我安装的是 pyqt 5.7 了,学习一下子
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   914 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 88ms · UTC 21:10 · PVG 05:10 · LAX 14:10 · JFK 17:10
    ♥ Do have faith in what you're doing.