04、pyqt入门使用--04、基本逻辑使用

01、逻辑和界面分离之文件选择框、输入获取框、点击事件获取输入框内容和文件名、展示text
    --基本结构:一个设计界面类,一个逻辑实现类,一个if __name__ == '__main__':
               通过界面和逻辑分离,使得整个开发架构清晰
    --存在的问题:前端显示后台日志/运行流程时,尽管使用了time.sleep()仍然无法实现依次输出,导致完全卡顿         
    --import sys
      import time
      from PyQt5 import QtCore, QtGui, QtWidgets
      from PyQt5.QtWidgets import QFileDialog
      from PyQt5.QtCore import *
      from PyQt5.QtWidgets import *


      class Ui_Form(object):
          def setupUi(self, Form):
              Form.setObjectName("Form")
              Form.resize(774, 445)
              Form.setMaximumSize(QtCore.QSize(16777215, 16777215))
              Form.setSizeIncrement(QtCore.QSize(2, 2))
              # 进行解析
              self.pushButton = QtWidgets.QPushButton(Form)
              self.pushButton.setGeometry(QtCore.QRect(590, 70, 75, 23))
              self.pushButton.setObjectName("pushButton")
              # 一条线而已不在乎
              self.line = QtWidgets.QFrame(Form)
              self.line.setGeometry(QtCore.QRect(0, 150, 771, 16))
              self.line.setFrameShape(QtWidgets.QFrame.HLine)
              self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
              self.line.setObjectName("line")
              # 文本输入
              self.textEdit = QtWidgets.QTextEdit(Form)
              self.textEdit.setGeometry(QtCore.QRect(10, 180, 751, 241))
              self.textEdit.setObjectName("textEdit")
              # 选择文件
              self.pushButton_2 = QtWidgets.QPushButton(Form)
              self.pushButton_2.setGeometry(QtCore.QRect(420, 70, 121, 23))
              self.pushButton_2.setObjectName("pushButton_2")
              # textlabel展示
              self.label = QtWidgets.QLabel(Form)
              self.label.setGeometry(QtCore.QRect(73, 70, 81, 21))
              self.label.setObjectName("label")
              # 单行输入
              self.lineEdit = QtWidgets.QLineEdit(Form)
              self.lineEdit.setGeometry(QtCore.QRect(160, 70, 211, 20))
              self.lineEdit.setObjectName("lineEdit")
              self.lineEdit.setPlaceholderText('请输入网址')
              #
              self.retranslateUi(Form)
              QtCore.QMetaObject.connectSlotsByName(Form)

          def retranslateUi(self, Form):
              _translate = QtCore.QCoreApplication.translate
              Form.setWindowTitle(_translate("Form", "Form"))
              self.pushButton.setText(_translate("Form", "选择文件并爬取内容"))
              self.pushButton_2.setText(_translate("Form", "下载爬取结果"))
              self.label.setText(_translate("Form", "  url 地址:"))


      # 获取接口输入框中数据 和 文件夹打开的文件
      class Get_Input_Text(QtWidgets.QWidget, Ui_Form):
          # 创建一个信号,相当于是创建一个通道,可以创建多个,同时使用_表示不可以在类外使用该信号
          _signal = QtCore.pyqtSignal(str)

          def __init__(self):
              super(Get_Input_Text, self).__init__()
              self.setupUi(self)
              # 两个按钮触发两个事件
              self.pushButton.clicked.connect(self.lineedit_Ptn)
              self.pushButton_2.clicked.connect(self.fileedit_Ptn)

              # 将信号通道的一端连上lineedit_Ptn,相当于插入lineedit_Ptn函数体中,使用参数接受
              self._signal.connect(self.lineedit_Ptn)
              self.textEdit.append('爬虫执行日志:')

          """
              获取输入的文件名
              获取url地址
              爬取网页       
          """
          def fileedit_Ptn(self):
              # 点击接受输入框的文字内容:网址
              Line_Input_Str = self.lineEdit.text()
              print('点击接受输入框的网址: ', str(Line_Input_Str))

              # 点击打开、选择获取文件路径,并发送
              fileName, selectFilter = QFileDialog.getOpenFileName(self, ("标题"), ("C:/Users/lwx898295/Desktop/lwx898295/python/djando"), ("选择文件(*.txt)"))
              print('点击接收文件路径,并发送: ', fileName)

              # 模拟执行爬取过程,并将数据日志发送到前台,并通过sleep定时发送,但是这种方式会有问题,不是真正的定时
              # 因为pyqt封装的的是C++的Qt,所以需要我们使用pyqt自带的定时器/使用进程
              for i in range(20):
                  self._signal.emit(str(fileName), 'liming weishuo')
                  time.sleep(1)

          """
              text展示爬取进程
          """
          def lineedit_Ptn(self, parameter, parameter02):
              # txt文件路径
              file_path = parameter
              self.textEdit.append('lalallalal')
              self.textEdit.append(file_path)
              time.sleep(0.5)

      if __name__ == '__main__':
          app = QtWidgets.QApplication(sys.argv)
          get_input_text = Get_Input_Text()
          get_input_text.show()
          sys.exit(app.exec_())
          
02、逻辑和界面分离之使用定时器
    --
    --
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值