python图形化编程

一、pyside6图形化编程(不好打包)

1.1 spide6安装

视频教程:【python】快速上手GUI图形界面的编写(一)(使用pyside6,pyqt6,pyside2,pyqt5)_哔哩哔哩_bilibili

环境安装:

  • 1、再pycharm中配置Designer

    • 打开pycharm---新建工程

    • 1、通过pycharm下面的Temirnal进行安装,因为只有通过这样安装,下载的pyside6才在当前目录下,安装pyside6模块

      • pip3 install pyside6 注意:必须要在pycharm下面的Temirnal进行安装
    • 2、打开setting---External Tools---点击右侧的加号 + --新建扩展工具

      • Name填写:PySide6-Designer
      • Description填写:PySide6-Designer
      • Program:待下一步查询到该路径后再填写,先空着
      • Arguments填写:$FileName$
      • Working directory填写:$ProjectFileDir$
    • 3、查询Program,在当前项目目录新建 main.py,如果main.py已经存在,就将其内容清空,填写下面的代码

      • import sys
        print(sys.executable)   #结果为:C:\Users\painter\Desktop\python_gui\venv\Scripts\python.exe
        
    • 4、填写Program:

      • 再次根据步骤2找到扩展工具PySide6-Designer,编辑刚才的扩展工具,根据上一步的查询结果,在当前项目的venv\Scripts\ 目录下找到pyside6-designer.exe
  • 2、配置PyUic

    • 操作步骤和第一大步骤保持一致,不一样的内容为:
      • Name填写:PyUic
      • Description填写:PyUic
      • Program:这次不需要查询,只需要在venv\Scripts\ 目录下找到pyside6-uic.exe
      • Arguments填写:$FileName$ -o $FileNameWtihoutExtension$.py -x
      • Working directory填写:$FileDir$

1.2 创建ui文件和编辑ui文件

创建流程:

  • 在根目录--右键--New--File--main.ui

编辑ui文件

  • 右键ui文件--External Tools--Designer--新建窗体

窗体Main Window和Widget的区别

  • 这两个会影响后续的窗口绑定,选择的不同,绑定的代码有一些区别

1.3 ui和python的连接和转换

python连接ui的2种方式

  • 方式一:不推荐
    • 特点:需要多写一些代码
  • 方式二:推荐
    • 特点:直接通过ui里的一些控件的名字来连接,方便快捷
    • 设置方法:ui界面---窗体---窗体设定----勾选 Connect slots by name

ui文件转换为python文件

  • 右键ui文件---External Tools--PyUic

1.4 ui转python的缺点与解决方法

ui转换为python文件的缺点

  • 在设计ui的时候,经常需要中途转换为python文件查看效果,然后再继续编辑ui文件,继续设计,然后再次转换为python文件进行测试,但是每次ui文件转换为python文件,都会将原有的python文件内容清空,这会导致我们前面设计的一些python代码都会被清空

解决方法:

  • 假设我们test.ui 转换为的python文件为 test.py ,我们只需要再次新建一个main.py文件或者其他名字的python文件,然后在main.py里面创建类,让该类继承 test.py,这样无论test.py生成多少次,都不影响我们的最终代码 main.py

1.5 python图形化编程模板

模板:以后直接修改main.py文件即可

  • # @Time : 2021-12-01 18:49 
    # @Author : painter
    # @File : main.py
    # ! /usr/bin/env python
    # -*- coding: UTF-8 -*-
    import sys
    # widgets窗口需要的模板
    from PySide6 import QtCore, QtWidgets
    from PySide6.QtCore import Slot   #必须要有,否则后面无法使用这个装饰器
    from test import Ui_Form
    
    
    class View(QtWidgets.QWidget, Ui_Form):  # 这是多继承,因为多继承,所以将main入口里的代码进行了简化
        def __init__(self):             #初始化
            super().__init__()  # 这里也不能更改
            self.setupUi(self)      #自己建立自己的ui
    
    
    if __name__ == '__main__':
        # 这是模板,下面的几乎不用变动
        QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
        app = QtWidgets.QApplication(sys.argv)
    
        # 下面这个是用来绑定widget窗口
        window = QtWidgets.QWidget()
        view = View()  # 实例化一个对象
    
        # 下面的代码固定不动
        view.show()
        sys.exit(app.exec())
    
    

1.6 ui和python动作的联动

意义:也就是当我们在ui上执行的一些操作,怎么在python里进行获取、修改

核心思想:

  • 通过每个ui的控件的类名来实现

基本思路:

  • 在我们的main里的view类里面创建函数来操作控件

易错点:

  • 我们必须要通过装饰器来进行操作控件,也就是我们要在我们创建的每一个操作控件的函数上面加上:@Slot()

怎么获取每个控件拥有哪些信号(函数)?

  • 在ui编辑界面---编辑---编辑信号槽--拖动控件到空白处,即可弹出该控件的各种信号

二、pyqt5图形化编程(推荐)

为什么要学pyqt5?

  • 1、互联网上的资料更多
  • 2、更好打包,用pyside6打包各种报错

1.1 环境配置

推荐使用环境:

  • python3.8以及3.8以下,因为win7不支持python3.9

安装pyqt5和qt工具

  • pip3 install PyQt5
  • pip3 install pyqt5-tools

在pycharm里配置designer和PyUic

  • 1、再pycharm中配置Designer
    • 1、打开setting---External Tools---点击右侧的加号 + --新建扩展工具
      • Name填写:pyqt5-Designer
      • Description填写:pyqt5-Designer
      • Program:D:\python\Python36\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
        • 可以用everying搜索designer.exe的路径
      • Arguments填写:$FileName$
      • Working directory填写:$ProjectFileDir$
    • 2、在pycharm里配置PyUic
      • 打开setting---External Tools---点击右侧的加号 + --新建扩展工具
        • Name填写:PyUic
        • Description填写:PyUic
        • Program:D:\python\Python36\Scripts\pyuic5.exe
          • 可以用everying搜索pyuic5.exe的路径
        • Arguments填写:$FileName$ -o $FileNameWithoutExtension$.py -x
        • Working directory填写:$FileDir$

1.2 基本语法与使用

基本语法:

  • 运行入口函数:保持不变

    • if __name__ == '__main__':
          import sys
          app = QtWidgets.QApplication(sys.argv)
          MainWindow = QtWidgets.QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(MainWindow)
          MainWindow.show()
          sys.exit(app.exec_())
      

让ui和python绑定

  • 1、必须在类Ui_MainWindow下面的setupUi方法最下面进行添加代码

  • 2、功能触发,比如点击按钮,会触发我们自定义的函数

    • self.pushButton.clicked.connect(self.clear_message)   
      #点击按钮,会触发我们自定义的函数 clear_message,注意,clicked不能少,connect也不能少
      
  • 3、核心:核心就是 self+ui里控件的类名+操作

  • 4、完整代码示例:

    • from PyQt5 import QtCore, QtGui, QtWidgets
      
      
      class Ui_MainWindow(object):
          def setupUi(self, MainWindow):
              MainWindow.setObjectName("MainWindow")
              MainWindow.resize(800, 600)
              self.centralwidget = QtWidgets.QWidget(MainWindow)
              self.centralwidget.setObjectName("centralwidget")
              self.pushButton = QtWidgets.QPushButton(self.centralwidget)
              self.pushButton.setGeometry(QtCore.QRect(260, 460, 121, 51))
              self.pushButton.setObjectName("pushButton")
              self.label = QtWidgets.QLabel(self.centralwidget)
              self.label.setGeometry(QtCore.QRect(210, 80, 191, 51))
              self.label.setObjectName("label")
              self.line = QtWidgets.QFrame(self.centralwidget)
              self.line.setGeometry(QtCore.QRect(0, 50, 611, 16))
              self.line.setFrameShape(QtWidgets.QFrame.HLine)
              self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
              self.line.setObjectName("line")
              self.line_2 = QtWidgets.QFrame(self.centralwidget)
              self.line_2.setGeometry(QtCore.QRect(0, 320, 611, 21))
              self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
              self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
              self.line_2.setObjectName("line_2")
              self.line_3 = QtWidgets.QFrame(self.centralwidget)
              self.line_3.setGeometry(QtCore.QRect(10, 160, 611, 31))
              self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
              self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
              self.line_3.setObjectName("line_3")
              self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
              self.textEdit.setGeometry(QtCore.QRect(170, 200, 211, 111))
              self.textEdit.setObjectName("textEdit")
              MainWindow.setCentralWidget(self.centralwidget)
              self.menubar = QtWidgets.QMenuBar(MainWindow)
              self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
              self.menubar.setObjectName("menubar")
              MainWindow.setMenuBar(self.menubar)
              self.statusbar = QtWidgets.QStatusBar(MainWindow)
              self.statusbar.setObjectName("statusbar")
              MainWindow.setStatusBar(self.statusbar)
      
              self.retranslateUi(MainWindow)
              QtCore.QMetaObject.connectSlotsByName(MainWindow)
      
              #本行上面的代码都是自动生成的,无需管,下面的代码才是我们自己写的
      
      
              self.pushButton.clicked.connect(self.clear_message)   #将按钮pushButton和我们的定义的函数clear_message绑定起来,点击按钮就触发该函数
      
          def clear_message(self):
                  self.textEdit.clear()      #清楚文本框的内容
      
      
          def retranslateUi(self, MainWindow):
              _translate = QtCore.QCoreApplication.translate
              MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
              self.pushButton.setText(_translate("MainWindow", "PushButton"))
              self.label.setText(_translate("MainWindow", "文本清楚测试"))
      
      if __name__ == '__main__':
          import sys
          app = QtWidgets.QApplication(sys.argv)
          MainWindow = QtWidgets.QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(MainWindow)
          MainWindow.show()
          sys.exit(app.exec_())
      

选择文件功能

  • 1、需要在ui设计界面添加 toolButton 按钮

  • 2、需要在python代码里使用以下代码

    •     self.toolButton.clicked.connect(self.select_file)
      def select_file(self):   #文件选择框
          self.filename = QtWidgets.QFileDialog.getOpenFileName()[0]
          self.filepath.setText(self.filename)
      

常用操作

  • 获取文本框的内容

    • self.keyword.text()    #这是lineEdit才能用text,另外一个好像需要toplane
      
  • 修改文本框的内容

    • self.filepath.setText(self.filename)   
      
  • 清空文本框

    • self.keyword.clear() 
      

1.3 项目实战一:post漏扫

完整代码:post漏扫项目

  • # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'test.ui'
    #
    # Created by: PyQt5 UI code generator 5.15.4
    #
    # WARNING: Any manual changes made to this file will be lost when pyuic5 is
    # run again.  Do not edit this file unless you know what you are doing.
    
    
    from PyQt5 import QtCore, QtGui, QtWidgets
    import requests,time,os
    
    class Ui_Form(object):
        def setupUi(self, Form):
            Form.setObjectName("Form")
            Form.resize(935, 692)
            self.postdata = QtWidgets.QLineEdit(Form)
            self.postdata.setGeometry(QtCore.QRect(640, 210, 281, 421))
            self.postdata.setText("")
            self.postdata.setObjectName("postdata")
            self.pushButton = QtWidgets.QPushButton(Form)
            self.pushButton.setGeometry(QtCore.QRect(450, 510, 121, 41))
            self.pushButton.setObjectName("pushButton")
            self.label = QtWidgets.QLabel(Form)
            self.label.setGeometry(QtCore.QRect(220, 0, 321, 51))
            font = QtGui.QFont()
            font.setPointSize(20)
            font.setBold(True)
            self.label.setFont(font)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            self.label_2 = QtWidgets.QLabel(Form)
            self.label_2.setGeometry(QtCore.QRect(730, 30, 161, 21))
            font = QtGui.QFont()
            font.setPointSize(13)
            font.setBold(True)
            font.setItalic(True)
            font.setUnderline(True)
            self.label_2.setFont(font)
            self.label_2.setObjectName("label_2")
            self.label_3 = QtWidgets.QLabel(Form)
            self.label_3.setGeometry(QtCore.QRect(70, 650, 801, 41))
            font = QtGui.QFont()
            font.setBold(True)
            font.setUnderline(True)
            self.label_3.setFont(font)
            self.label_3.setScaledContents(False)
            self.label_3.setObjectName("label_3")
            self.label_4 = QtWidgets.QLabel(Form)
            self.label_4.setGeometry(QtCore.QRect(530, 330, 141, 41))
            font = QtGui.QFont()
            font.setBold(True)
            self.label_4.setFont(font)
            self.label_4.setObjectName("label_4")
            self.label_5 = QtWidgets.QLabel(Form)
            self.label_5.setGeometry(QtCore.QRect(650, 150, 91, 21))
            self.label_5.setObjectName("label_5")
            self.keyword = QtWidgets.QLineEdit(Form)
            self.keyword.setGeometry(QtCore.QRect(750, 150, 151, 21))
            self.keyword.setObjectName("keyword")
            self.toolButton = QtWidgets.QToolButton(Form)
            self.toolButton.setGeometry(QtCore.QRect(860, 100, 41, 21))
            self.toolButton.setObjectName("toolButton")
            self.filepath = QtWidgets.QLineEdit(Form)
            self.filepath.setGeometry(QtCore.QRect(640, 100, 211, 21))
            self.filepath.setObjectName("filepath")
            self.label_6 = QtWidgets.QLabel(Form)
            self.label_6.setGeometry(QtCore.QRect(710, 80, 91, 21))
            self.label_6.setObjectName("label_6")
            self.label_7 = QtWidgets.QLabel(Form)
            self.label_7.setGeometry(QtCore.QRect(130, 80, 91, 31))
            font = QtGui.QFont()
            font.setBold(True)
            self.label_7.setFont(font)
            self.label_7.setObjectName("label_7")
            self.textBrowser = QtWidgets.QTextBrowser(Form)
            self.textBrowser.setGeometry(QtCore.QRect(30, 150, 361, 461))
            self.textBrowser.setObjectName("textBrowser")
            self.clearButton = QtWidgets.QPushButton(Form)
            self.clearButton.setGeometry(QtCore.QRect(460, 400, 91, 41))
            self.clearButton.setObjectName("clearButton")
    
            self.retranslateUi(Form)
            QtCore.QMetaObject.connectSlotsByName(Form)
            
            
            #下面的都是自己写的代码
            self.toolButton.clicked.connect(self.select_file)     #连接toolButton
            self.clearButton.clicked.connect(self.message_clear)   #连接clearButton,触发清空函数
            self.pushButton.clicked.connect(self.main)
    
        def select_file(self):   #文件选择框
            self.filename = QtWidgets.QFileDialog.getOpenFileName()[0]
            self.filepath.setText(self.filename)    #将文本框的内容设置为刚刚获取到的文件路径
    
    
        def message_clear(self):
            self.postdata.clear()  #清空按钮
            self.keyword.clear()  # 清空按钮
            self.textBrowser.clear()
    
    
        def main(self):
            self.pushButton.setEnabled(False)   #点击一次之后禁用按钮
    
            with open(self.filename, 'r', encoding="utf-8") as f:
                temp = f.readlines()
    
            for host in temp:
                self.ip = host.strip()
                self.run(self.postdata.text(), self.ip, self.keyword.text())       #self.postdata.text()是获取到的post文本框的内容,self.keyword.text()是关键字文本框那里获取到的内容
            self.pushButton.setEnabled(True)  # 全部检测完之后启用按钮
    
        def run(self,temp, u, keyword):
            headers = {}
            print("类型为:application/x-www-form-urlencoded")
            host = u.strip("http://").strip("https://")
            header, data = self.split_data(temp,host)  # 获取请求的url,请求头(host已经替换为空),post的data
    
            payload = u + self.url_dic  # 漏洞地址
    
            if "application/json" in str(header):  # 查看当前数据包的编码类型,方便后续对headers进行删除部分数据,因为有时候必须要删除某些数据才能正常
                content_type = "application/json"
            elif "multipart/form-data" in str(header):
                content_type = "multipart/form-data"
            else:
                content_type = "application/x-www-form-urlencoded"
            for m in header:
                position = m.find(":")  # 第一个冒号出现的位置
                key = m[0:position]
                value = m[position:].strip(":").strip()  # 去除多余的空格,去除分割多余的冒号,
                headers.update({"{}".format(key): "{}".format(value)})  # 将处理好的数据储存到headers里去
    
            self.post_message(payload, headers, data, keyword, content_type)
    
        def split_data(self,message, host):
            # 用来取出请求头、请求体,以及目标 后面拼接的url
            header = []  # 储存请求头
            data = []  # 储存请求体
            message = str(message).split("\n")
    
            position = message.index("")  # 查找第一个空行,这就是请求头和请求体的分割位置
            msg1 = message[0:position]  # 请求头的数据,未处理
            msg2 = message[position + 1:]  # 请求体的数据,未处理
            print(message)
            for line1 in msg1:
    
                if line1.startswith("POST"):
                    url_dic = line1.strip("POST")
                    url_dic = url_dic.replace("HTTP/1.0", '')
                    url_dic = url_dic.replace("HTTP/1.1", '')
                    url_dic = url_dic.replace("HTTP/2.0", '')
                    self.url_dic = url_dic.strip()  # 这是目标后面的网址url
                    continue
                else:
                    header.append(line1.strip())
            for line2 in msg2:
                data.append(line2)  # 这个不需要去除换行,因为请求体里有的有空行
    
            return  header, data
    
        def post_message(self,payload_url, headers, data, keyword, content_type):
            data = str(data).strip("[").strip("]").strip("'")  # 提取data,去掉多余的字符
            if content_type == "application/json":
                res = requests.post(url=payload_url, headers=headers, json=data)  # 这里的post的参数是json
                if keyword in res:
                    print("存在漏洞:{}".format(url))
                    self.textBrowser.append(payload_url)
                    self.write_result(url)
            elif content_type == "multipart/form-data":
                h = headers
                h.pop("Content-Type")  # 必须要删除,python会自动添加,否则会冲突
                files = {'file': open('1.txt', 'rb')}
                res = requests.post(url=payload_url, headers=h, files=files).content.decode("utf-8")
                if keyword in res:
                    print("存在漏洞:{}".format(payload_url))
                    self.textBrowser.append(payload_url)
                    self.write_result(payload_url)
            else:
    
                res = requests.post(url=payload_url, headers=headers, data=data).content.decode("utf-8")
    
                # res = requests.post(url=url,headers=h,data=data, proxies=proxies).content.decode("utf-8")
                if keyword in res:
                    print("存在漏洞:{}".format(payload_url))
                    self.textBrowser.append(payload_url)
                    self.write_result(payload_url)
    
    
        def write_result(self,result_url):
            with open("vul_result.txt", "a+", encoding="utf-8") as f:
                f.write(result_url + '\n')
    
    
        def retranslateUi(self, Form):
            _translate = QtCore.QCoreApplication.translate
            Form.setWindowTitle(_translate("Form", "Form"))
            self.pushButton.setText(_translate("Form", "开始检测"))
            self.label.setText(_translate("Form", "post请求提交器"))
            self.label_2.setText(_translate("Form", "author:   painter"))
            self.label_3.setText(_translate("Form", "功能:将post数据包直接粘贴到这里,然后选择目标txt,提交命中漏洞的关键字,最后点击开始检测,最终的结果会保存至vul_result.txt目录下"))
            self.label_4.setText(_translate("Form", "post数据包粘贴处"))
            self.label_5.setText(_translate("Form", "漏洞触发关键字:"))
            self.toolButton.setText(_translate("Form", "open"))
            self.label_6.setText(_translate("Form", "选择目标文件"))
            self.label_7.setText(_translate("Form", "漏洞结果"))
            self.clearButton.setText(_translate("Form", "清空结果"))
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        Form = QtWidgets.QWidget()
        ui = Ui_Form()
        ui.setupUi(Form)
        Form.show()
        sys.exit(app.exec_())
    
    

1.4 项目实战二:撩骚机器人

完整代码:

  • # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'test.ui'
    #
    # Created by: PyQt5 UI code generator 5.15.4
    #
    # WARNING: Any manual changes made to this file will be lost when pyuic5 is
    # run again.  Do not edit this file unless you know what you are doing.
    
    
    from PyQt5 import QtCore, QtGui, QtWidgets
    import requests
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(864, 697)
            font = QtGui.QFont()
            font.setFamily("Agency FB")
            font.setStyleStrategy(QtGui.QFont.PreferDefault)
            MainWindow.setFont(font)
            MainWindow.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)
            MainWindow.setStyleSheet("")
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.label = QtWidgets.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(230, -10, 271, 91))
            self.label.setObjectName("label")
            self.line_5 = QtWidgets.QFrame(self.centralwidget)
            self.line_5.setGeometry(QtCore.QRect(140, 530, 81, 20))
            self.line_5.setFrameShape(QtWidgets.QFrame.HLine)
            self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
            self.line_5.setObjectName("line_5")
            self.label_2 = QtWidgets.QLabel(self.centralwidget)
            self.label_2.setGeometry(QtCore.QRect(140, 490, 91, 41))
            self.label_2.setStyleSheet("\n"
    "background-color:rgb(240, 240, 240);")
            self.label_2.setObjectName("label_2")
            self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
            self.lineEdit.setGeometry(QtCore.QRect(220, 480, 271, 61))
            self.lineEdit.setObjectName("lineEdit")
            self.pushButton = QtWidgets.QPushButton(self.centralwidget)
            self.pushButton.setGeometry(QtCore.QRect(490, 480, 71, 61))
            font = QtGui.QFont()
            font.setFamily("SimSun")
            font.setPointSize(20)
            font.setBold(True)
            font.setWeight(75)
            font.setStyleStrategy(QtGui.QFont.NoAntialias)
            self.pushButton.setFont(font)
            self.pushButton.setStyleSheet("background-color: rgb(255, 85, 0);")
            self.pushButton.setObjectName("pushButton")
            self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
            self.textBrowser.setGeometry(QtCore.QRect(140, 110, 421, 371))
            self.textBrowser.setStyleSheet("")
            self.textBrowser.setObjectName("textBrowser")
            self.line = QtWidgets.QFrame(self.centralwidget)
            self.line.setGeometry(QtCore.QRect(140, 480, 3, 61))
            self.line.setFrameShape(QtWidgets.QFrame.VLine)
            self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
            self.line.setObjectName("line")
            self.label_3 = QtWidgets.QLabel(self.centralwidget)
            self.label_3.setGeometry(QtCore.QRect(600, 180, 261, 131))
            self.label_3.setObjectName("label_3")
            self.label_4 = QtWidgets.QLabel(self.centralwidget)
            self.label_4.setGeometry(QtCore.QRect(650, 430, 161, 51))
            self.label_4.setObjectName("label_4")
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 864, 21))
            self.menubar.setObjectName("menubar")
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
            self.pushButton.clicked.connect(self.get_response)
            self.pushButton.clicked.connect(self.lineEdit.clear)
    
        def get_response(self):
            self.textBrowser.clear()
            query = self.lineEdit.text()  # 获取提交查询的内容
            print(query)
    
            print("盘他:")
            url = 'http://app.lihsk.com/lihsk/android/paster/getPasterByTitle.html'
            data = {
                'name': query,
                'pageNumber': '1',
                'pageSize': '10'
            }
            html = requests.post(url=url, data=data).json()
            if (html['count'] == 0):
                print("未查询到数据!")
                self.textBrowser.setText("未查询到数据。。。")
                return
            else :
                for i in html['list']:
                    print(i['content'])
    
                    self.textBrowser.append(i['content'])
    
    
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "撩骚机器人                                                                                                                                  ---painter"))
            self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:48pt; font-weight:600; color:#ff5500; vertical-align:sub;\">撩骚机器人</span></p></body></html>"))
            self.label_2.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:24pt; color:#000000;\">输入:</span></p></body></html>"))
            self.pushButton.setText(_translate("MainWindow", "发送"))
            self.label_3.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:18pt;\"/><span style=\" font-size:18pt; font-weight:600;\"> 注意事项:</span></p><p><span style=\" font-size:14pt;\">需要联网查询数据库,</span></p><p><span style=\" font-size:14pt;\">所以需要等待几秒钟</span></p></body></html>"))
            self.label_4.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:18pt; font-weight:600; color:#ff0000;\">author:painter</span></p></body></html>"))
    
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    
    

1.5 打包成exe

推荐环境:

  • python3.8及其以下

推荐工具:auto-py-to-exe

  • 安装:pip36 install auto-py-to-exe
  • 启动: auto-py-to-exe
  • 基本功能:
    • 1、打包成一个目录
    • 2、打包成一个exe
    • 3、可以设置图标
    • 4、其他功能都有,这是图形化界面
posted @ 2022-03-04 19:22  painter520  阅读(2816)  评论(0编辑  收藏  举报