[PySide]在简易在线词典中使用多线程
刚开始写这个小工具的时候遇到了查询过程软件界面假死的情况。
后来在华蟒讨论组里得到指点,使用多线程将查询动作另开线程,同ui线程分开。
使用python的threading类创建新线程后问题果断解决。
这里使用QThread创建新线程(PySide):
#!/usr/bin/python # -*- coding: utf-8 -*- import sys from PySide.QtCore import * from PySide.QtGui import * import urllib2 import re #import threading from BeautifulSoup import BeautifulSoup class Dialog(QDialog): def __init__(self,parent=None,): super(Dialog,self).__init__(parent) self.setWindowTitle(u"词典") self.browser=QTextBrowser() self.edit=QLineEdit(u"输入单词") self.browser.setText("QtSharp's Toy") quitbutton=QPushButton(u'退出') quitbutton.clicked.connect(app.quit) searchbutton=QPushButton(u'查询') searchbutton.clicked.connect(self.sendword) layout=QVBoxLayout() layout.addWidget(searchbutton) layout.addWidget(self.edit) layout.addWidget(quitbutton) layout.addWidget(self.browser) self.setLayout(layout) def sendword(self): word=self.edit.text() self.sendsignal.emit(word) sendsignal=Signal(str) @Slot(str) def getexp(self,exp): self.browser.setText(exp) class Search(QThread): def __init__(self,parent=None,): super(Search,self).__init__(parent) def run(self): wordweb=urllib2.urlopen("http://dict.baidu.com/s?wd=%s"% self.word) charset = wordweb.headers['Content-Type'].split(' charset=')[0].lower() soup=BeautifulSoup(wordweb,fromEncoding=charset) exp=soup.findAll(text=re.compile(u'译典通'))[0].parent.parent.parent.parent exp=str(exp).decode('utf8') self.exped.emit(exp) exped=Signal(str) @Slot(str) def getword(self,word): self.word=word self.run() if __name__=='__main__': app=QApplication(sys.argv) dialog=Dialog() search=Search() dialog.sendsignal.connect(search.getword) search.exped.connect(dialog.getexp) dialog.show() sys.exit(app.exec_())
作者:catmelo
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。