学习PyQt UI编程笔记。相对PyQt来说,PySide资料为少。

此篇记录异步获取代码后,同步显示于界面窗体中,涉及线程网步,此为知识点。

直录代码:

# encoding: utf-8

from PySide.QtGui import *
from PySide.QtCore import *
from gethtml_ui import *
from options_ui import *
import threading # Make main window class
class OptionsDialog(QDialog):
def __init__(self, parent=None, title=''):
super(OptionsDialog, self).__init__(parent) self.setWindowFlags(Qt.Dialog | Qt.WindowCloseButtonHint | Qt.MSWindowsFixedSizeDialogHint)
self.ui = Ui_Options()
self.ui.setupUi(self)
self.setWindowTitle(title) class GetHtmlDialog(QDialog):
htmlGet = Signal(str) def __init__(self, parent=None):
super(GetHtmlDialog, self).__init__(parent) # 最大化&最小化按钮
self.setWindowFlags(Qt.Window)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.setWindowTitle('Get Html') self.ui.btnGet.setEnabled(False)
clipboard = QApplication.clipboard()
# url = clipboard.text()
# if url == '':
url = 'https://www.baidu.com'
self.ui.edtUrl.setText(url) # 同步更新内容
self.htmlGet.connect(lambda s: self.ui.txtHtml.setPlainText(s)) def get_html(self, url):
import urllib2 if not 'http' in url:
url = 'http://' + url
try:
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.9.5.1000 Chrome/39.0.2146.0 Safari/537.36')
res = urllib2.urlopen(req)
html = res.read().decode('utf-8')
# 同步到主线程
self.htmlGet.emit(html)
except BaseException, e:
self.updateHtml.emit(e.message)
finally:
self.ui.edtUrl.setEnabled(True)
self.ui.btnGet.setEnabled(True) @QtCore.Slot(str)
def on_edtUrl_textChanged(self, s):
self.ui.btnGet.setEnabled(s != '') @QtCore.Slot(QKeyEvent)
def edtUrl_keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Enter and self.ui.btnGet.isEnabled():
self.ui.btnGet.click() @QtCore.Slot()
def on_btnGet_clicked(self):
self.ui.edtUrl.setEnabled(False)
self.ui.btnGet.setEnabled(False)
t = threading.Thread(target=GetHtmlDialog.get_html, args=(self, self.ui.edtUrl.text()), name='thread')
t.start()
# self.get_html(self.ui.edtUrl.text()) @QtCore.Slot()
def on_btnClose_clicked(self):
app.exit() @QtCore.Slot()
def on_btnOptions_clicked(self):
od = OptionsDialog(self, self.ui.edtUrl.text())
# QDialog.Accepted
if od.exec_():
print 'yeah!'
else:
print 'cancel.' # End of main window class if __name__ == '__main__':
import sys app = QApplication(sys.argv)
ud = GetHtmlDialog()
ud.show()
sys.exit(app.exec_())

显示效果如图:

工欲善其事必先利其器,熟悉本不熟的东西,本是个摸索过程,希望能更多探索它的功能

Python: PySide(Qt)异步获取网页源码的更多相关文章

  1. Python爬虫学习之获取网页源码

    偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义 ...

  2. [Xcode 实际操作]八、网络与多线程-(9)使用异步Get方式获取网页源码

    目录:[Swift]Xcode实际操作 本文将演示如何通过Get请求方式,异步获取网页源码. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开视图控制器的代码文 ...

  3. QT:轻松获取网页源码

    获取网页源码的小例子,代码很简单,就不多作解释了. 不过一定要注意网页的编码问题,否则会出现乱码的!!! #include <QtCore> #include <QtNetwork& ...

  4. C语言之socket获取网页源码

    写爬虫也许你用的是python,类似urlopen(url).read()即可获得普通的网页的源码,或者用的java的网络库加上流操作,或者其他高级语言.但你有没有想过使用C语言来实现呢?我曾经以为用 ...

  5. vc++获取网页源码

    1. 获取网页源码的步骤: com组件的初始化 创建WinHttpRequest对象 创建并实例化WinHttpRequest组件 调用Open方法打开连接 调用Send方法发送请求 使用Respon ...

  6. vc++获取网页源码之使用import+接口方式

    1.使用IWinHttpRequest获取网页源码 首先要创建基于对话框的mfc应用程序 2.import+接口方式 首先导入winhttp.dll,使用IWinHttpRequest接口 #impo ...

  7. 高效获取网页源码COM

    目前获取网页源码有几种方法: 1.WebClient下载页面2.HttpWebRequest发请求获取3.com组件xmlhttp获取 三者比较:WebClient代码最少,效率最慢:xmlhttp代 ...

  8. Python3 Selenium WebDriver网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    Python3 Selenium WebDriver网页的前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 通过selenium webdr ...

  9. Python3.x获取网页源码

    Python3.x获取网页源码 1,获取网页的头部信息以确定网页的编码方式: import urllib.request res = urllib.request.urlopen('http://ww ...

随机推荐

  1. 微信、企业微信和支付窗 SDK 三合一,JeeWx-api 1.2.0 版本发布

    摘要: JEEWX-API 是第一款JAVA版微信极速SDK,同时集成企业微信SDK,支付窗SDK,可以快速的基于她进行微信公众号.企业微信.支付窗应用开发.基于 jeewx-api 开发可以立即拥有 ...

  2. 爬虫--requests模块高级(代理和cookie操作)

    代理和cookie操作 一.基于requests模块的cookie操作 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests ...

  3. table布局与div布局

      DIV与TABLE本身并不存在什么优缺点,所谓web标准只是推荐的是正确的使用标签,好比说:DIV用于布局,而TABLE则本来就是转二维数据的.让TABLE做该做的事,并不是说页面里不出现TABL ...

  4. DMA/Zero copy

    DMA: 直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就 ...

  5. C++复习:继承与派生

    1继承概念 面向对象程序设计有4个主要特点:抽象.封装.继承和多态性.说了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础. 要 ...

  6. js 改变颜色值

    /** * 获取颜色值 */ const color2RGB = (color) => { if (typeof color !== 'string' || (color.length !== ...

  7. checkbox中jQuery对数组和对象的操作

    ------------------------------------------------------------------------------------------ 来段小例子,jQu ...

  8. JAVA 16进制转ASCII -- 2018年5月25日 周五

    /** * 16进制转ASCII * * @param hex * @return */ public static String hex2Str(String hex) { StringBuilde ...

  9. Python类的进阶.md

    属性绑定 在python中可以给类对象动态的绑定属性 但是由于这种特性,随意动态绑定也会带来麻烦,因此可用__slots__来限制可绑定的属性名称 __slots__的绑定对于子类是不生效的,只对当前 ...

  10. git 分支合并develop 重新拉取

    1.本地包 zb-local 上传到对应的线上分支 zb-online cd 进入本地所在文件夹,然后执行下面三项 git add . git commit -m '修改' git push   或者 ...