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



  • 0_1524119219399_111.jpg

    接下来处理qt界面的逻辑

    qt控制爬虫逻辑

    # 每20分钟爬新图片
            
    self.timerThread = QtCore.QTimer()
            
    self.timerThread.setInterval(1000 * 60 * 20)
            
    self.timerThread.timeout.connect(self._thread.start)
            
    self.timerThread.start()
    

    爬虫会下载图片,造成gui画面卡顿,所以我放在线程中进行,线程里就直接调爬虫命令

    class MyThread(QtCore.QThread):
    
        def __init__(self, parent=None):
            super(MyThread, self).__init__(parent)
    
        def run(self):
            handleTimer()
    

    爬虫下载的图片,需要在qt中显示,我用QFileSystemWatcher监视文件夹,别问我为啥不在下载后通知qt,跨线程通信伤不起

    self._watcher = QtCore.QFileSystemWatcher()
    
    if not os.path.exists('cache'):
        os.makedirs('cache')
    self._watcher.addPath(os.path.join(currentPath, 'cache'))
    self._watcher.directoryChanged.connect(self.handleWatcher)
    
    #监视文件夹更新
        def handleWatcher(self, path):
            for (dirpath, dirnames, filenames) in os.walk(qstring_to_str(path)):
                for file in filenames:
                    p = (os.path.join(currentPath, 'cache', file))
                    self.addImg(p)
    
    
    

    如果有新图片,添加到数组中

        def addImg(self, name):
            # print('ad==',name)
            if not name in self._names:
                self._names.append(name)
    

    每10s轮换一张图片,也是用定时器实现

    self._timer = QtCore.QTimer()
    self._timer.setInterval(1000 * 10)
    self._timer.timeout.connect(self.playImg)
    self._timer.start()
    

    时间一到,就把图片塞给label,这样界面就有图片了,关于QPixmap,吐槽一下,在win10测的好好的,一到win7就不好用,各种路径都试了,只好放弃win7

    #定义槽
        @QtCore.pyqtSlot('PyQt_PyObject')
        def playImg(self):
    
            if self._currentIndex < len(self._names):
                path = self._names[self._currentIndex]
                pix = QtGui.QPixmap(path)
    
                self.ui.label.setPixmap(pix)
                self._currentIndex += 1
    

    程序开发差不多了,接下来,打包成exe

    未完待续



  • @青山白云 是不是PyQt 4对QPixmap的支持不如Qt4对QPixmap1的支持呢?还有一个可能是不是QPixmap在多线程的环境中使用会出现一些小问题呢?🐸



  • @jiangcaiyang 现在只发现win10好用,win7不好用,其他没有对比


  • 网站研运

    @青山白云 嗯,我想桌面的操作系统,大概只有Windows 10不会变了吧,这个操作系统大概会支持数十年之久呢。


Log in to reply
 

走马观花

最近的回复

  • 这张图或许阐述了这个问题。
    有效打造个人品牌.png

    其实对于我们职场人员,尤其是程序员,都有很强的作用。我们虽然产品意识比较弱,但是我们对产品的敏感性强,尤其是我们有制作过产品的经验,这反而是一个优势。

    read more
  • @jiangcaiyang 给你一个大大的赞!
    论坛最近打算再次启用iframely服务了。试试看!

    https://community.nodebb.org/topic/4401

    read more

关注我们

微博
QQ群