从零开始开发python和qt项目(一)



  • 前言:python作为很火的程序语言,用来做爬虫实在是太方便了,结合qt界面,简直就是大杀器,
    多的不说,让我们开始吧。

    思路:本次主要是用python开发,qt作为界面导入到python中,
    项目内容是python爬取某壁纸网站图片,显示在qt上

    1.首先安装Python, Qt(时间紧,没提供链接,请自行百度)
    下载安装***python-2.7.13.amd64.msi***
    PyQt4-4.11.3-gpl-Py2.7-Qt4.8.6-x64.exe

    2.下载安装***pyCharm***(Python的IDE)

    3.用pyCharm编写python代码,工程结构如下

    0_1524057548337_TIM截图20180418211842.png

    4.Spider2.py是我们的主要文件,

    0_1524057710573_TIM截图20180418212129.png

    看这段代码是不是很熟悉,这里我们创建了一个qt窗口,Widget是我们自己的窗口类

    0_1524057926956_22.png

    它继承QWidget,并在构造里面指定ui文件
    那么,QtGui.QWidget怎么会出现在python里呢,那是因为我们在文件里导入了pyqt4

    from PyQt4 import QtGui, QtCore
    

    那Ui_Form是怎么生成的呢,
    如果你安装了pyqt4,那么在【C:\Python27\Lib\site-packages\PyQt4】会有一个designer.exe,启动后就是qt设计师界面

    0_1524058346972_223.png

    拖进去一个label,保存后,会有一个ui_widget.ui文件,Qt通过QtUiTools模块来读取UI文件,而pyqt无法直读UI文件,需要通过pyuic4指令进行转换

    pyuic4 -o ui_widget.py ui_widget.ui
    

    转换后得到ui_widget.py ,哇,忽然有一种勇者大冒险的感觉,慢慢探险,慢慢发掘

    我们可以稍微看一下ui_widget.py 文件

    0_1524058874539_224.png

    原来Ui_Form是这个类的名字

    在Spider2.py里导入ui_widget.py ,这样我们的界面就出来了

    from ui_widget import *
    

    未完待续



  • @青山白云 我想了解一下,现在早已经出了PyQt5了,看到你使用的还是PyQt4。这两者有什么关联么?另外一个问题是我看到社交网络上高手们都说Python + Scrapy2做爬虫挺好的,我也没有尝试,但是要是以后有爬虫爬的需求我会考虑Scrapy2的。



  • @jiangcaiyang 我没有用pyqt5,但是估计跟pyqt4原理一样,Scrapy2只是借用了Scrapy框架,爬虫的顺序和逻辑跟你直接写是一样的,小项目直接写比较快,大项目用Scrapy框架合适


Log in to reply
 

走马观花

最近的回复

  • 诶 没有Linux吗??

    read more
  • 萌梦 男孩,女孩,和蛋

    menghome.png

    read more
  • 设计模式-工厂模式

    使用qt/qml来演示设计模式效果,便于学习理解

    1)定义创建对象的接口,封装对象的创建
    2)使具体化类的工作延迟到工厂子类中

    bg.png
    image.png

    1. 工厂类

    createProduct使用了参数来选择要创建哪个产品

    #ifndef FACTORY_H #define FACTORY_H #include <QObject> class Product; class QString; class Factory: public QObject { Q_OBJECT public: virtual ~Factory() = 0; virtual Product* createProduct(QString type) = 0; protected: Factory(); }; class ConcreteFactory: public Factory { Q_OBJECT public: ~ConcreteFactory(); ConcreteFactory(); public slots: Product* createProduct(QString type); }; #endif // FACTORY_H #include "factory.h" #include "product.h" #include <QtQml/qqml.h> Factory::~Factory() { } Factory::Factory() { qmlRegisterType<Product>("Product", 1, 0, "Product"); } ConcreteFactory::~ConcreteFactory() { } ConcreteFactory::ConcreteFactory() { } Product *ConcreteFactory::createProduct(QString type) { if(type == "boy") return static_cast<Product *>(new ConcreteProduct1()); else if(type == "girl") return static_cast<Product *>(new ConcreteProduct2()); return static_cast<Product *>(new ConcreteProduct1()); } 2 产品类

    一个产品是萌梦男,一个产品是萌梦女

    #ifndef PRODUCT_H #define PRODUCT_H #include <QObject> class Product: public QObject { Q_OBJECT public: virtual ~Product() = 0; Q_PROPERTY(QString icon READ icon NOTIFY iconChanged) QString m_icon; QString icon() const { return m_icon; } signals: void iconChanged(QString icon); protected: Product(); signals: public slots: }; class ConcreteProduct1: public Product { Q_OBJECT public: ~ConcreteProduct1(); ConcreteProduct1(); }; class ConcreteProduct2: public Product { Q_OBJECT public: ~ConcreteProduct2(); ConcreteProduct2(); }; #endif // PRODUCT_H #include "product.h" Product::~Product() { } Product::Product() { } ConcreteProduct1::~ConcreteProduct1() { } ConcreteProduct1::ConcreteProduct1() { m_icon = "qrc:/images/boy.png"; } ConcreteProduct2::~ConcreteProduct2() { } ConcreteProduct2::ConcreteProduct2() { m_icon = "qrc:/images/girl.png"; } 3. main.qml

    使用timer,canvas,listview等实现一个自动化生产的动画效果

    源代码

    Fork me on Gitee

    read more
  • blender建模 章鱼
    捕获2.PNG 😵

    read more

关注我们

微博
QQ群