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、其他功能都有,這是圖形化界面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM