学习pyqt

2018/03/17 学习

Posted by WangXiaoDong on March 17, 2018
    今天是周六,本来和同学约好今天一起去买点东西,但是北京突然下起了大雪!本以为
今年在北京是看不到大雪的,但是没想到竟然看到了漂泊大雪,真的是非常激动。虽然由于
大雪,我们的出行计划没有实行,但是在在屋子里学习代码也别有一番滋味。今天,我主要
看了一下如何使用Python进行界面编程,然后发现使用Pyqt非常简单,因为当年我学习代码就是
从Qt开始的,所以发现Qt移植到Python上面的代码非常熟悉!一天差不多就搞定了,以后界面
编程就非常轻松啦!

对于PyQt5的编程,这个网站有一些简单的入门教程,非常不错,比如这个网站。 看完后,感觉使用PyQt5编写界面的程序真的是非常简单,跟我当年 直接用qt编程非常像,果然,以前学习qt的经验对于使用pythonqt模块来说非常有用。但是我感觉仅仅使用代码组合成的界面编程不能令我满足,只有 QMLPyQt5的联合编程才更有意思,于是我就研究了一下如何联合编程,完成了一个简单的QML 和PyQt5的联合编程的例子。

QML代码如下:

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1

ApplicationWindow{
    visible:true
    width:640
    height:480
    id:window
    title: "editor"

    signal textUpdated(string text)


    TextArea{
        text:"hello"
        onTextChanged: textUpdated(text);
    }

}

有了qml文件后,我们就可以根据该文件进行python文件的编写,把里面的 信号传递给python文件中,代码如下:

import sys
from PyQt5.QtCore import QObject, QUrl, Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine

def show(text):
    print(text)


if __name__ == "__main__":
  app = QApplication(sys.argv)
  engine = QQmlApplicationEngine()
  engine.load('main.qml')
  win = engine.rootObjects()[0]
  win.textUpdated.connect(show)
  win.show()
  sys.exit(app.exec_())

这样,一个简单的python和Qml文件的通信的例子就完成了。