Python 废话,PyQt
我一直在编写一个非常简单的脚本,它从stackoverflow中的python标记获取问题标题,并在QTextBrowser中显示它们 应用程序按预期工作(至少在最短时间内),但窗口直到加载完网页才显示,刷新按钮将程序冻结,直到加载完毕。是否有办法解决此问题?以下是完整的代码:Python 废话,PyQt,python,pyqt,beautifulsoup,Python,Pyqt,Beautifulsoup,我一直在编写一个非常简单的脚本,它从stackoverflow中的python标记获取问题标题,并在QTextBrowser中显示它们 应用程序按预期工作(至少在最短时间内),但窗口直到加载完网页才显示,刷新按钮将程序冻结,直到加载完毕。是否有办法解决此问题?以下是完整的代码: #! usr/bin/env python from PyQt4.QtGui import * import requests from bs4 import BeautifulSoup import lxml fro
#! usr/bin/env python
from PyQt4.QtGui import *
import requests
from bs4 import BeautifulSoup
import lxml
from threading import Thread
class Form(QWidget):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.url = "http://www.stackoverflow.com/questions/tagged/python"
self.browser = QTextBrowser()
self.connectionlabel = QLabel()
self.refreshBtn = QPushButton("Refresh")
self.refreshBtn.clicked.connect(self.get)
layout = QGridLayout()
layout.addWidget(self.connectionlabel, 0, 0)
layout.addWidget(self.refreshBtn, 0, 1)
layout.addWidget(self.browser, 1, 0,1,2)
self.setLayout(layout)
self.setWindowTitle("StackOverflow: Python")
def get(self):
self.browser.clear()
self.connectionlabel.setText("Connecting.....")
try:
response = requests.get(self.url)
soup = BeautifulSoup(response.content, 'lxml')
self.connectionlabel.setText("Connected.")
questions = soup.find_all("a", {"class": "question-hyperlink"})
for i, questionTitle in enumerate(questions):
try:
self.browser.append("\n"+str(i+1)+". "+questionTitle.text)
except:
pass
except:
self.connectionlabel.setText("Couldn't connect.")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
screen = Form()
screen.show()
t = Thread(screen.get)
t.deamon = True
t.start()
sys.exit(app.exec_())
UI将始终冻结,直到代码执行完成。为了避免这种情况,请使用多处理或线程,并在单独的进程/线程中调用阻塞代码。您也可以使用PyQT。在代码执行完成之前,UI将始终冻结。为了避免这种情况,请使用多处理或线程,并在单独的进程/线程中调用阻塞代码。您也可以使用PyQT。在代码执行完成之前,UI将始终冻结。为了避免这种情况,请使用多处理或线程,并在单独的进程/线程中调用阻塞代码。您也可以使用PyQT。在代码执行完成之前,UI将始终冻结。为了避免这种情况,请使用多处理或线程,并在单独的进程/线程中调用阻塞代码。您也可以使用PyQT。您的internet连接速度必须非常慢。对我来说,
get()
方法只需要大约一秒钟就可以运行。您的internet连接速度一定很慢。对我来说,get()
方法只需要大约一秒钟就可以运行。您的internet连接速度一定很慢。对我来说,get()
方法只需要大约一秒钟就可以运行。您的internet连接速度一定很慢。对我来说,运行get()
方法只需要大约一秒钟这使用PySide,但PyQT将完全相同。我试图将其添加到另一个线程,但随后出现以下错误QObject:无法为位于不同线程中的父线程创建子线程。(父线程是QTextDocument(0x1b8b680),父线程是QThread(0x18186a0),当前线程是QThread(0x7F17703E3E0)
相同的代码,但删除了init方法中的self.get()
调用,并执行了以下操作:如果u u name_uuuuuuuuuu=='uuuuu main_uuuuuu':import sys app=QApplication(sys.argv)screen=Form().show()p=thread(target=screen.get)p.daemon=True p.start()sys.exit(app.exec_())
sorry无法添加新行请再次查看示例代码,并尝试查看如何将函数与UI代码分开。检查def doScrape(self)
函数。是的,你是对的,doScrape()
方法有一个q.put()
在很多地方。对于初学者,您甚至可以完全跳过队列。这只是用于更新进度。-这使用PySide,但PyQT将完全相同。我尝试将其添加到另一个线程,但随后出现以下错误QObject:无法为位于不同线程中的父线程创建子线程。(父线程是QTextDocument(0x1b8b680),父线程是QThread(0x18186a0),当前线程是QThread(0x7F17703E3E0)
相同的代码,但删除了init方法中的self.get()
调用,并执行了以下操作:如果u u name_uuuuuuuuuu=='uuuuu main_uuuuuu':import sys app=QApplication(sys.argv)screen=Form().show()p=thread(target=screen.get)p.daemon=True p.start()sys.exit(app.exec_())
sorry无法添加新行请再次查看示例代码,并尝试查看如何将函数与UI代码分开。检查def doScrape(self)
函数。是的,你是对的,doScrape()
方法有一个q.put()
在很多地方。对于初学者,您甚至可以完全跳过队列。这只是用于更新进度。-这使用PySide,但PyQT将完全相同。我尝试将其添加到另一个线程,但随后出现以下错误QObject:无法为位于不同线程中的父线程创建子线程。(父线程是QTextDocument(0x1b8b680),父线程是QThread(0x18186a0),当前线程是QThread(0x7F17703E3E0)
相同的代码,但删除了init方法中的self.get()
调用,并执行了以下操作:如果u u name_uuuuuuuuuu=='uuuuu main_uuuuuu':import sys app=QApplication(sys.argv)screen=Form().show()p=thread(target=screen.get)p.daemon=True p.start()sys.exit(app.exec_())
sorry无法添加新行请再次查看示例代码,并尝试查看如何将函数与UI代码分开。检查def doScrape(self)
函数。是的,你是对的,doScrape()
方法有一个q.put()
在很多地方。对于初学者,您甚至可以完全跳过队列。这只是用于更新进度。-这使用PySide,但PyQT将完全相同。我尝试将其添加到另一个线程,但随后出现以下错误QObject:无法为位于不同线程中的父线程创建子线程。(父线程是QTextDocument(0x1b8b680),父线程是QThread(0x18186a0),当前线程是QThread(0x7F17703E3E0)
相同的代码,但删除了init方法中的self.get()
调用,并执行了以下操作:如果u u name_uuuuuuuuuu=='uuuuu main_uuuuuu':import sys app=QApplication(sys.argv)screen=Form().show()p=thread(target=screen.get)p.daemon=True p.start()sys.exit(app.exec_())
sorry无法添加新行请再次查看示例代码,并尝试查看如何将函数与UI代码分开。检查def doScrape(self)
函数。是的,你是对的,doScrape()
方法有一个q.put()