thepoy 发表于 2020-10-19 22:26

用PyQt5显示爬虫进度的示例

本帖最后由 thepoy 于 2020-10-19 23:02 编辑

class GUI(QWidget):
    def __init__(self):
      super(GUI, self).__init__()
      self.tasks_lbl = QLabel("待处理数量:100,完成进度:0 %", self)
      # self.tasks_lbl.adjustSize()
      self.tasks_lbl.resize(550, 24)
      self.tasks_lbl.move(210, 10)

    def initUI(self):
      # self.setFixedSize(500, 90)
      self.resize(800, 150)
      self.center()

      self.main_widget = QWidget(self)
      self.progressBar = QProgressBar(self.main_widget)
      self.progressBar.setGeometry(QRect(20, 60, 760, 50))

      self.setWindowTitle("爬虫")

      self.thread_1 = Worker()
      self.thread_1.progressBarValue.connect(self.spider)
      self.thread_1.update_task_lbl.connect(self.task)
      self.thread_1.start()

    def center(self):
      qr = self.frameGeometry()
      cp = QDesktopWidget().availableGeometry().center()
      qr.moveCenter(cp)
      self.move(qr.topLeft())

    def spider(self, i):
      self.progressBar.setValue(i)

    def task(self, remain: int, percent: int):
      if percent < 100:
            self.tasks_lbl.setText(f"待处理数量:{remain},完成进度:{percent} %")
      else:
            self.tasks_lbl.setText("全部任务处理完成")
            self.tasks_lbl.resize(600, 24)
            # print(self.tasks_lbl.size())
            self.tasks_lbl.move(125, 10)


class Worker(QThread):
    progressBarValue = pyqtSignal(int)
    update_task_lbl = pyqtSignal(int, int)

    def __init__(self):
      super(Worker, self).__init__()

      self.excel_file = "./名录.xlsx"
      self.df = pd.read_excel(self.excel_file)

    def run(self):
      for idx, row in self.df.iterrows():
            result = Spider(row["column1"]).result
            self.progressBarValue.emit(((idx + 1) * 100) // self.df["column1"].count())# 发送进度条的值 信号
            self.update_task_lbl.emit(self.df["column1"].count() - idx - 1,
                                    ((idx + 1) * 100) // self.df["column1"].count())# 更新进度数量
            if result:
                self.df.loc] =
      self.df.to_excel("结果.xlsx", index=False)

适当修改即可使用。

上面只是PyQT相关代码,其他代码就不提供了,下面的图片是示例:
Qlabel文字显示不全,可以调整label宽度微调,我懒得调了。
而且pyqt5的代码虽然能跨系统使用,但显示效果不同,不同系统上还得再调。

thepoy 发表于 2020-10-20 12:34

Loker 发表于 2020-10-20 11:17
我用pyqt5写了个评价工具,最后还是感觉H5好用,代码重新推了用flask写了个web版本。用pyqt写界面感觉很混 ...

是flask/django + 浏览器的形式写的吗?

thepoy 发表于 2020-10-19 23:13

boxer 发表于 2020-10-19 23:02
python写界面还是用HTML好些吧, 毕竟学会一个简单的HTML, 一万种语言都一样写法

我也这么想过,但是没有具体的思路,就先用PyQt5实现了

细水流长 发表于 2020-10-19 22:39

thepoy 发表于 2020-10-19 22:51

细水流长 发表于 2020-10-19 22:39
想问下楼主,有没有比较好的pyqt5教程,pyqt5是不是不好学呀

python的GUI都不算好学,我对pyqt5也就是有问题找谷歌,没有系统地学过

boxer 发表于 2020-10-19 23:02

python写界面还是用HTML好些吧, 毕竟学会一个简单的HTML, 一万种语言都一样写法

apoul 发表于 2020-10-20 07:15

学习了感谢分享

ciker_li 发表于 2020-10-20 08:18

感谢分享

Loker 发表于 2020-10-20 11:17

我用pyqt5写了个评价工具,最后还是感觉H5好用,代码重新推了用flask写了个web版本。用pyqt写界面感觉很混乱。。

Loker 发表于 2020-10-20 20:34

thepoy 发表于 2020-10-20 12:34
是flask/django + 浏览器的形式写的吗?

我学过一段时间Django,感觉还是flask适合小项目。
页: [1] 2
查看完整版本: 用PyQt5显示爬虫进度的示例