python使用PyQt5,及QtCreator,qt-unified界面设计以及逻辑实现

  1.环境安装: 

  1.安装pyQt5 pip3 install pyQt  
  2.安装设计器 pip3 install pyQt-tools  (英文版的) 我是用的是自己Windows上安装的qt-unified软件
  3.qt-unified安装,下载地址  https://www.qt.io/
 

2.qt-unified软件设计界面

  新建项目—>Qt—>From

  

  

  根据左边菜单栏上的控件直接拖到窗口上布局 设计如下界面:

   

   保存文件,命令行切换到保存的.ui文件目录执行如下命令将.ui文件转化py文件

  

pyuic5 -o mainwindow.py mainwindow.ui

  其中,-o 后的参数为输出文件的名称 -o 后第二个参数即为生成的ui文件的名称,报错请注意环境变量

  这个时候运行会报错,所以还需要配置几个步骤。

  • 增加几个引用
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog,QMessageBox
import sys 
  • 添加主函数脚本
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

  

  然后成功运行,弹出界面。

  这个时候,我们要把按钮和输入框的改造下,使其能够交互起来。  

  • QPushButton的信号槽连接:self.choose_file.clicked.connect(self.open_file),传入的是点击后执行的方法。

  • 获取QLineEdit里面的文本:self.cookie_edit.text()

  • 将文案输出到QTextBrowser组件中显示:self.message_show.append('爬取全部文章成功\n')

  • 判断复选框是否选中self.only_name.isChecked(),返回的是true/false。

  运行中我发现,每次执行的时候,QTextBrowser组件中的文案,不能像print()方法一样,一行一行的输出,每次都是要等到全部执行完后,一次性输出。这个不符合我设计QTextBrowser组件的初衷。于是我又去问了问怎么样才能让QTextBrowser组件中的文案一行一行的输出。

  最终多方尝试后,解决了这个问题,就是加入这句代码QApplication.processEvents(),可以将这句代码放入循环中,就能做到界面的实时刷新了。

  个人示例代码

  

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog,QMessageBox
import sys

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(479, 547)
        self.textout = QtWidgets.QTextBrowser(Form)
        self.textout.setGeometry(QtCore.QRect(20, 251, 431, 271))
        self.textout.setObjectName("textout")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(180, 10, 101, 31))
        self.label.setObjectName("label")
        self.lujinuot = QtWidgets.QLabel(Form)
        self.lujinuot.setGeometry(QtCore.QRect(90, 60, 271, 20))
        self.lujinuot.setObjectName("lujinuot")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(20, 60, 71, 21))
        self.label_3.setObjectName("label_3")
        self.selectfile = QtWidgets.QPushButton(Form)
        self.selectfile.setGeometry(QtCore.QRect(370, 60, 81, 23))
        self.selectfile.setObjectName("selectfile")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(20, 110, 54, 12))
        self.label_4.setObjectName("label_4")
        self.incookie = QtWidgets.QLineEdit(Form)
        self.incookie.setGeometry(QtCore.QRect(70, 109, 381, 21))
        self.incookie.setObjectName("incookie")
        self.startpachong = QtWidgets.QPushButton(Form)
        self.startpachong.setGeometry(QtCore.QRect(20, 190, 431, 41))
        self.startpachong.setObjectName("startpachong")
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "爬虫程序"))
        self.label.setText(_translate("Form", "<html><head/><body><p><span style=\" font-size:18pt;\">程序设置</span></p></body></html>"))
        self.lujinuot.setText(_translate("Form", " "))
        self.label_3.setText(_translate("Form", "<html><head/><body><p><span style=\" font-size:12pt;\">文件路径</span></p></body></html>"))
        self.selectfile.setText(_translate("Form", "选择文件"))
        self.label_4.setText(_translate("Form", "cookie:"))
        self.startpachong.setText(_translate("Form", "开始爬取"))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()

    #可以通过QFileDialog.getOpenFileName打开文件目录,选择文件
    #可以通过QFileDialog.getExistingDirectory选择文件目
    # ui.cookie_edit.text()     #获取QLineEdit里面的文本
    # ui.lujinuot.setText(filename)     #设置QLineEdit里面的文本
    #QtWidgets.QApplication.processEvents()   #界面实时刷新
    #ui.selectfile.clicked.connect(selectfile)    #点击事件
    # ui.textout.append("点击了选择文件按钮\n")   #添加内容
    # ui.selectfile.isChecked()      #返回按钮的状态True/False

    #提示框
    # msg_box = QMessageBox(QMessageBox.Warning, "消息提示", "消息内容")
    # msg_box.show()
    # msg_box.exec_()


    def selectfile():
        # msg_box = QMessageBox(QMessageBox.Warning, "消息提示", "消息内容")
        # msg_box.show()
        # msg_box.exec_()

        filename= QFileDialog.getExistingDirectory()
        ui.lujinuot.setText(filename)

    ui.selectfile.clicked.connect(selectfile)
    ui.textout.append("输入cookie点开始爬取\n")

    QtWidgets.QApplication.processEvents() #界面实时刷新

    sys.exit(app.exec_())

  

  

猜你喜欢

转载自www.cnblogs.com/chen0307/p/9844352.html