废话,PyQt

2024-06-26 14:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在编写一个非常简单的脚本,它从stackoverflow中的python标记获取问题标题,并在QTextBrowser中显示它们

应用程序按预期工作(至少在最短时间内),但窗口直到加载完网页才显示,刷新按钮将程序冻结,直到加载完毕。是否有办法解决此问题?以下是完整的代码:

#! 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_())

Tags: fromimportselfbrowserformgetsysstackoverflow