pyqt5 +pyinstall打造屬於自己的桌面版程序(學習階段)

網上關於pyqt5的教程特別少,終於東拼西湊,做出一點東西出來,很簡單的小應用,便於上手學習。
pyqt5的主文件代碼如下,代碼特別多,也沒怎麼細分。大家可以參考下。github地址
pyinstall打包的一點小技巧送給大家。

  1. 取消生成程序doc窗口使用命令
pyinstaller -F -i 圖標路徑   文件路徑   --noconsole(取消dos)
  1. 如果生成的應用有圖片文件,可以先把圖片轉化爲py文件,然後在py文件裏面引用即可下面上代碼
import base64


def jpg_py(picture_names, py_name="imgs"):
    """
    將圖像文件轉換爲py文件
    :param picture_name:
    :return:
    """
    write_data = []
    for index,picture_name in enumerate(picture_names):

        # paths = picture_name.replace('file:///','')
        # filename = "jpg_01-%s"%index
        open_jpg = open("%s" % paths, 'rb')
        b64str = base64.b64encode(open_jpg.read())
        open_jpg.close()
        with open('%s.py' % py_name, 'a+') as f :
        # 注意這邊b64str一定要加上.decode()
            f.write('%s = "%s"\n' % (filename, b64str.decode()))



if __name__ == '__main__':
    pics = [r'C:/Users/zq/Desktop/Project/ico/ooopic_1548575226.ico']
    jpg_py(pics, 'memor555y_pic')  # 將pics裏面的圖片寫到 memory_pic.py 中
    print("ok")

引用的代碼如下

def get_pic(pic_code, pic_name):
    image = open(pic_name, 'wb')
    image.write(base64.b64decode(pic_code))
    image.close()
    return image

可以在程序最後用os.remove()方法移除掉就ok
這個小項目主要包含:

  • pyqt5多線程應用
  • pyqt5和js腳本交互
  • pyqt5和爬蟲融合
  • pyqt5內嵌瀏覽器的初級入門
  • pyqt5頁面css樣式學習
    下面上一點圖片
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    主文件代碼如下,很多,慎重觀看
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'hello.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from pdf_word import parser_pdfs
from memory_pic import mg_ico
from memory_pic import start_jpg
from memory_pic import jpg_5
from pdf_str import readPDF
from get_ip import get_host_ip
from cs1 import html

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QTimer, QDateTime
from PyQt5.QtGui import QIcon,  QPixmap, QFont
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget, QDateTimeEdit, QMainWindow, QLCDNumber, QDesktopWidget, \
    QFileDialog, QAction, QMenu, QSystemTrayIcon

from PyQt5.QtCore import QUrl

from PyQt5.QtWebEngineWidgets import QWebEngineView


import os
import sys
import base64


from spiders import spider_weath


##################################################
# 加載全局圖片資源 函數                       #
#                                                #
##################################################
def get_pic(pic_code, pic_name):
    image = open(pic_name, 'wb')
    image.write(base64.b64decode(pic_code))
    image.close()
    return image

    ##################################################
    # 加載全局圖片資源                        #
    #                                                #
    ##################################################



# 在這裏使用圖片 icon.ico

img_3 = get_pic(mg_ico, 'mg.ico')
img_st = get_pic(jpg_5, '01-5.jpg')
img_st = get_pic(start_jpg, 'start.jpg')






##################################################
# 唯一ui類                                        #
#                                                #
##################################################

class Ui_Dialog(QWidget):
    windowList = []
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        # Dialog.resize(1000, 950)

        Dialog.setGeometry(400, 50, 1000, 950)

        # Dialog.setDisabled(False)

        Dialog.setWindowOpacity(0.95)  # 設置窗口透明度
        # Dialog.setWindowFlag(QtCore.Qt.FramelessWindowHint)  # 隱藏邊框
        # Dialog.setDisabled(True)
        # Dialog.WindowMinimizeButtonHint()
        Dialog.setStyleSheet("#Dialog{background:red;border-top:1px solid white;border-bottom:1px solid white;border-left:1px solid white;border-top-left-radius:10px;border-bottom-left-radius:10px;}")
        # Dialog.setAttribute(QtCore.Qt.WA_TranslucentBackground)  # 設置窗口背景透明
        self.cwd = os.getcwd()
        self.center()
        self.tabWidget = QtWidgets.QTabWidget(Dialog)
        self.tabWidget.setGeometry(QtCore.QRect(0, 0, 1000, 950))
        self.tabWidget.setObjectName("tabWidget")
        # QTableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed)

        ##################################################
        # c創建一個tabwidget(上方工具欄)                         #
        #                                                #
        ##################################################
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab1")

        self.tabWidget.setCurrentIndex(1)
        # self.tabWidget.showNormal()

        self.tab3 = QtWidgets.QWidget()
        self.tab3.setObjectName("tab3")
        # self.tab3.setLayout(self.tabWidget)

        self.tab4 = QtWidgets.QWidget()
        self.tab4.setObjectName("tab4")

        self.tab5 = QtWidgets.QWidget()
        self.tab5.setObjectName("tab5")

        self.tabWidget.addTab(self.tab, "")
        self.tabWidget.addTab(self.tab3, "")
        self.tabWidget.addTab(self.tab4, "")
        self.tabWidget.addTab(self.tab5, "")

        self.tabWidget.setDocumentMode(True)
        self.setAcceptDrops(True)

        ##################################################
        # 創建一個彈出框全局變量                             #
        #                                                #
        ##################################################
        self.msgBox = QMessageBox()  # 創建彈出框

        self.mongo = QtWidgets.QPushButton(self.tab)
        self.mongo.setGeometry(QtCore.QRect(10, 40, 130, 40))
        self.mongo.setObjectName("pushButton_mongo")

        self.jupy = QtWidgets.QPushButton(self.tab)
        self.jupy.setGeometry(QtCore.QRect(160, 40, 130, 42))
        self.jupy.setObjectName("pushButton_2")

        self.lineEdit_2 = QtWidgets.QLineEdit(self.tab)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 270, 451, 41))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_2.setStyleSheet('color:#BA55D3')

        self.lineEdit_3 = QtWidgets.QLineEdit(self.tab)
        self.lineEdit_3.setGeometry(QtCore.QRect(10, 220, 451, 41))
        self.lineEdit_3.setObjectName("lineEdit_3")

        self.base_str = QtWidgets.QPushButton(self.tab)
        self.base_str.setGeometry(QtCore.QRect(510, 220, 131, 41))
        self.base_str.setObjectName("pushButton_4")

        self.str_base = QtWidgets.QPushButton(self.tab)
        self.str_base.setGeometry(QtCore.QRect(510, 270, 131, 41))
        self.str_base.setObjectName("pushButton_5")

        self.textBrowser = QtWidgets.QTextBrowser(self.tab)
        self.textBrowser.setGeometry(QtCore.QRect(700, 0, 256, 192))
        self.textBrowser.setObjectName("textBrowser")  # ip欄

        self.textBrowser_2 = QtWidgets.QTextBrowser(self.tab)
        self.textBrowser_2.setGeometry(QtCore.QRect(15, 80, 130, 200))
        self.textBrowser_2.setObjectName("textBrowser_2")  # 溫度

        self.textBrowser_4 = QtWidgets.QTextBrowser(self.tab)
        self.textBrowser_4.setGeometry(QtCore.QRect(110, 110, 630, 111))
        self.textBrowser_4.setObjectName("textBrowser_4")  # 符號

        self.textBrowser_6 = QtWidgets.QTextBrowser(self.tab)
        self.textBrowser_6.setGeometry(QtCore.QRect(70, 160, 700, 50))
        self.textBrowser_6.setObjectName("textBrowser_6")  # 風向
        ##################################################
        # 作者按鈕init                                     #
        #                                                #
        ##################################################
        self.auth = QtWidgets.QPushButton(self.tab)
        self.auth.setGeometry(QtCore.QRect(600, 120, 150, 40))
        self.auth.setObjectName("auth")  # 作者藍
        ##################################################
        # 計時器lableui                                   #
        #                                                #
        ##################################################
        self.texttime = QtWidgets.QLCDNumber(self.tab)
        self.texttime.setGeometry(QtCore.QRect(240, 40, 500, 30))
        self.texttime.setMouseTracking(False)
        self.texttime.setDigitCount(19)
        self.texttime.setMode(QLCDNumber.Dec)
        self.texttime.setSegmentStyle(QLCDNumber.Flat)
        self.texttime.setObjectName("texttime")
        self.wx = QtWidgets.QLabel(self.tab)
        self.wx.setGeometry(QtCore.QRect(780, 90, 150, 150))

        ##################################################
        # 作者按鈕ui                                       #
        #                                                #
        ##################################################
        jpg = QPixmap('01-5.jpg').scaled(self.wx.width(), self.wx.height())
        self.wx.setPixmap(jpg)
        self.wx.setStyleSheet('background:transparent;border-width:0;border-style:outset;')
        ##################################################
        # 文本對比按鈕ui                                   #
        #                                                #
        ##################################################
        self.cmptext1 = QtWidgets.QTextEdit(self.tab)
        self.cmptext1.setGeometry(QtCore.QRect(20, 350, 411, 511))
        self.cmptext1.setObjectName("cmptext1")

        self.cmptext2 = QtWidgets.QTextEdit(self.tab)
        self.cmptext2.setGeometry(QtCore.QRect(540, 350, 411, 511))
        self.cmptext2.setObjectName("cmptext2")

        self.cmps = QtWidgets.QPushButton(self.tab)
        self.cmps.setGeometry(QtCore.QRect(440, 600, 93, 28))
        self.cmps.setObjectName("cmps")

        ##################################################
        # tab3ui                                         #
        #                                                #
        ##################################################
        self.btn_chooseMutiFile = QtWidgets.QPushButton(self.tab3)
        self.btn_chooseMutiFile.setObjectName("btn_chooseMutiFile")
        self.btn_chooseMutiFile.setText("pdf-->txt")
        self.btn_chooseMutiFile.setGeometry(QtCore.QRect(400, 40, 200, 40))
        self.textbrower3 = QtWidgets.QTextBrowser(self.tab3)
        self.textbrower3.setGeometry(QtCore.QRect(15, 80, 960, 800))
        self.textbrower3.setObjectName("textbrower3")

        ##################################################
        # tab4ui配置                                      #
        #                                                #
        ##################################################

        self.btn_chooseMutiFile_tab4 = QtWidgets.QPushButton(self.tab4)
        self.btn_chooseMutiFile_tab4.setObjectName("btn_chooseMutiFile_tab4")
        self.btn_chooseMutiFile_tab4.setText("pdf-->word")
        self.btn_chooseMutiFile_tab4.setGeometry(QtCore.QRect(50, 70, 200, 40))

        self.tab4_brower4 = QtWidgets.QTextBrowser(self.tab4)
        self.tab4_brower4.setGeometry(QtCore.QRect(300, 30, 500, 120))
        self.tab4_brower4.setObjectName("tab4_brower4")

        self.img_py = QtWidgets.QPushButton(self.tab4)
        self.img_py.setObjectName("img_py")
        self.img_py.setText("img-->py")
        self.img_py.setGeometry(QtCore.QRect(50, 360, 200, 40))

        self.tab4_brower_img = QtWidgets.QTextBrowser(self.tab4)
        self.tab4_brower_img.setGeometry(QtCore.QRect(300, 320, 500, 120))
        self.tab4_brower_img.setObjectName("tab4_brower_img")

        self.winIconPix = QPixmap(16, 16)
        self.setWindowIcon(QIcon('mg.ico'))
        self.tray = QSystemTrayIcon(Dialog)
        self.trayIconPix = QPixmap(16, 16)
        self.tray.setIcon(QIcon('mg.ico'))
#################################################################################################
        self.js = QtWidgets.QPushButton(self.tab5)
        self.js.setGeometry(QtCore.QRect(80, 40, 130, 42))
        self.js.setObjectName("js")

        self.ht = QtWidgets.QPushButton(self.tab5)
        self.ht.setGeometry(QtCore.QRect(260, 40, 130, 42))
        self.ht.setObjectName("ht")

        self.browser = QWebEngineView(self.tab5)  # 新增一個瀏覽器引擎
        self.browser.setWindowTitle('QWebChannel交互Demo')

        with open("cs6.html","w",encoding="utf-8") as f:
            f.write(html)

        url_string = "file:///cs6.html"  # 內置的網頁地址,此處我採用的是本地的。遠程同樣可以使用。
        self.browser.load(QUrl(url_string))
        # self.browser.(html)
        self.browser.resize(530, 280)
        self.browser.setStyleSheet("background:transparent;border-width:1;border-style:outset;color:white;border-color:#FFF5EE;background-color:#012456;")

        ##################################################
        # 掛載到主界面                                     #
        #                                                #
        ##################################################


        QtCore.QMetaObject.connectSlotsByName(Dialog)
        self.retranslateUi(Dialog)

    ##################################################
    # 自定義樣式、點擊事件模塊                           #
    #                                                #
    ##################################################
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "小工具"))
        # Dialog.setStyleSheet("#Dialog{background-color:red;}")
        Dialog.setWindowIcon(QIcon('mg.ico'))
        # palette = QPalette()
        # palette.setBrush(QPalette.Background, QBrush(
        #     QPixmap('01-4.jpg').scaled(self.tab.width(), self.tab.height())))

        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "首頁"))
        # self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab5), _translate("Dialog", "瀏覽器"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab3), _translate("Dialog", "pdf轉換爲text"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab4), _translate("Dialog", "pdf轉換爲word"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab5), _translate("Dialog", "tools"))

        "QTabBar::tab{min-height: 30px; min-width: 80px;border-top-right-radius:20px;border-radius:20px;}"
        self.tabWidget.setStyleSheet(
            "QTabBar{background-color:#333300;outline:solid 2px;}QTabBar::tab{border-bottom-color:#C2C7CB;min-width: "
            "150px;border-right:2px solid black;border-style: outset;min-height: 40px;"
            "color:white;background-color:#4169E1;}QTabBar::tab:selected{background-color: white;"
            "color:green;border-top-right-radius:10px;border-top-left-radius:10px;border:none}QTabBar::tab:first{margin-left:10px;}"
            "QTabBar::tab:hover:!selected{color:red;background-color:black;}")

        # self.tabWidget.setStyleSheet("QTabBar::tab:first:selected{background-color: white;}")  # 有問題
        self.tab.setStyleSheet("#tab1{background-color:#012456;}")
        self.tab3.setStyleSheet('#tab3{background-color:#012456;}')
        self.tab4.setStyleSheet('#tab4{background-color:#012456;}')
        self.tab5.setStyleSheet('#tab5{background-color:#012456;}')
        ##################################################
        # tab1按鈕模塊 樣式 事件                            #
        #                                                #
        ##################################################
        self.mongo.setText(_translate("Dialog", "mongo"))
        icon = QIcon()

        icon.addPixmap(QPixmap("start.jpg"), QIcon.Normal, QIcon.Off)

        self.mongo.setIcon(icon)

        self.mongo.setIconSize(QtCore.QSize(60, 30))
        self.mongo.setAutoRepeatDelay(200)
        self.mongo.clicked.connect(lambda: Dialog.yunxing(2, ))

        self.auth.setText(_translate("Dialog", "*作者*"))
        self.auth.clicked.connect(self.auth_qq)

        self.jupy.setIcon(icon)
        self.jupy.setIconSize(QtCore.QSize(60, 30))
        self.jupy.setAutoRepeatDelay(200)
        self.jupy.setText(_translate("Dialog", "jupyter"))
        self.jupy.clicked.connect(lambda: Dialog.yunxing(1, ))

        self.base_str.setText(_translate("Dialog", "解碼base64"))
        self.base_str.clicked.connect(self.b64_str)

        self.str_base.setText(_translate("Dialog", "轉碼base64"))
        self.str_base.clicked.connect(self.str_b64)

        self.cmps.setText(_translate("Dialog", "文本對比"))
        self.cmps.clicked.connect(self.cmp_text)

        ##################################################
        # 樣式模塊                                       #
        #                                                #
        ##################################################
        self.lineEdit_3.setStyleSheet(
            "background:transparent;border-width:0.5;border-style:outset;color:#FF0000;border-color:white;")
        self.lineEdit_2.setStyleSheet(
            "background:transparent;border-width:0.5;border-style:outset;color:#BA55D3;border-color:white;")
        self.cmps.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}')
        self.jupy.setStyleSheet(
            'QPushButton{background-Color:white;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red;}')
        self.mongo.setStyleSheet(
            '#pushButton_mongo{background-Color:white;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red}')
        self.base_str.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}')
        # self.base_str.setStyleSheet("")

        self.str_base.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color:red;background-color:black;}')
        self.auth.setStyleSheet(
            'QPushButton{background-Color:	#FF0000;background:transparent;border-width:0;border-style:outset;color:#87CEFA}QPushButton:hover{color: red;}')
        self.auth.setFont(QFont("Mongolian Baiti", 20, QFont.Bold))
        self.cmptext1.setStyleSheet(
            "background:transparent;border-width:1;border-style:outset;color:white;border-color:#FFF5EE;")
        self.cmptext2.setStyleSheet(
            "background:transparent;border-width:1;border-style:outset;color:white;border-color:#FFF5EE;")

        ##################################################
        # tab3模塊                                       #
        #                                                #
        ##################################################
        self.btn_chooseMutiFile.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}')
        self.btn_chooseMutiFile.clicked.connect(self.slot_btn_chooseMutiFile)
        self.textbrower3.setStyleSheet(
            "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:white;font-size:30px;")

        ##################################################
        # tab4模塊                                       #
        #                                                #
        ##################################################

        self.btn_chooseMutiFile_tab4.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}')
        self.btn_chooseMutiFile_tab4.clicked.connect(self.run_pdf_parse)

        self.tab4_brower4.setStyleSheet(
            "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:white;font-size:15px;")

        self.img_py.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}')
        self.img_py.clicked.connect(self.imgTopy)

        self.tab4_brower_img.setStyleSheet(
            "background:transparent;border-width:1;border-style:outset;color:#FF8C00;border-color:white;font-size:15px;")
#####################################################################################################################
        self.js.setText(_translate("Dialog", "計算器"))
        self.js.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red}')
        self.js.clicked.connect(lambda: Dialog.yunxing(3, ))

        self.ht.setText(_translate("Dialog", "畫圖"))
        self.ht.setStyleSheet(
            'QPushButton{background-Color:#7FFF00;border-radius: 10px;border: 2px solid green;}QPushButton:hover{color: red};background-attachment:scroll;')
        self.ht.clicked.connect(lambda: Dialog.yunxing(4, ))
        ##################################################
        # 計時器模塊                                       #
        #                                                #
        ##################################################
        self.timer = QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.showtime)

        self.timer.start()

        # self.timer1 = QTimer()
        # self.timer1.setInterval(1000)
        # # self.timer1.timeout.connect(self.showtime)
        # self.timer1.timeout.connect(self.scp_r)
        # self.timer1.start()


        ################################################################################
        # 初始調用爬蟲模塊
        #
        ##################################################################################
        self.run_spider()

    def auth_qq(self):
        QMessageBox.question(self, 'waring', '僅供學習使用',
                             QMessageBox.Yes, QMessageBox.Yes)

    def center(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)

    ################################################################################
    # 兩個轉碼函數
    #
    ##################################################################################

    def b64_str(self):
        """
        解碼
        :param input_b64:
        :return:
        """
        input_b64 = self.lineEdit_3.text()

        try:

            str_b6 = base64.b64decode(input_b64).decode(encoding='utf-8')
            self.lineEdit_2.setText(str_b6)

        except:

            QMessageBox.question(self, 'waring', '不是base64編碼',
                                 QMessageBox.Yes, QMessageBox.Yes)

    def str_b64(self):
        """
        解碼
        :param input_b64:
        :return:
        """
        input_b64 = self.lineEdit_2.text()

        b64_str = base64.b64encode(input_b64.encode('utf-8'))

        self.lineEdit_3.setText((b64_str).decode('utf-8'))


    ################################################################################
    # 計時器函數
    #
    ##################################################################################
    def showtime(self):
        self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
        self.dateEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
        test = self.dateEdit.text()
        # self.texttime.setText(test)
        self.texttime.display(test)
        self.texttime.setStyleSheet('font: italic 6pt \"Arial\";border-width:0;border-style:outset;color:#DC143C;')
        # self.texttime.setFont(QFont("Mongolian Baiti", 11, QFont.Bold))





    ################################################################################
    # 天氣預報爬蟲樣式運行模塊
    #
    ##################################################################################
    def run_spider(self):
        result = spider_weath()
        ip = get_host_ip()
        QMessageBox.question(self, 'HI', '來自 %s %s %s的你,你好吖!'%(result[0], result[1], result[2]),
                             QMessageBox.Yes, QMessageBox.Yes)
        self.textBrowser.setHtml(
            " &nbsp;<font color='red' >📍&nbsp;</font>:%s %s %s <br /> <font color='#FF8C00' >&nbsp;➤&nbsp;</font>:%s <br /> &nbsp;"
            "<font color='#FF4500' >☎&nbsp;</font>:%s" % (
            result[0], result[1], result[2], result[3],ip))

        self.textBrowser.setFont(QFont("Mongolian Baiti", 10, QFont.Bold))
        self.textBrowser.setStyleSheet("background:transparent;border-width:0;border-style:outset;color:white")
        self.textBrowser_6.setHtml("<font color='#FF8C00' >📢 💦</font>" + result[10] + "  " + result[11])
        self.textBrowser_6.setFont(QFont("Mongolian Baiti", 10, QFont.Bold))
        self.textBrowser_6.setStyleSheet("background:transparent;border-width:0;border-style:outset;color:white")
        # -----------------------------------------------------------------------------------------
        self.textBrowser_2.setText("%s°" % result[4])  # 溫度
        self.textBrowser_2.setFont(QFont("Mongolian Baiti", 40, QFont.Bold))
        self.textBrowser_2.setStyleSheet("background:transparent;border-width:0;border-style:outset;color:	white")

        # self.textBrowser_5.setText("")  # 溫度
        # self.textBrowser_5.setFont(QFont("Mongolian Baiti", 15, QFont.Bold))
        # self.textBrowser_5.setStyleSheet("background:transparent;border-width:0;border-style:outset;color:	white")

        self.textBrowser_4.setHtml(
            "<font color='#00008B' >💧</font> 溼度%s%%  %s %s%s級 %s " % (
            result[5], result[7], result[8], result[6], result[9]))  # 溫度
        self.textBrowser_4.setFont(QFont("Mongolian Baiti", 15, QFont.Bold))
        self.textBrowser_4.setStyleSheet("background:transparent;border-width:0;border-style:outset;color:	white")

    ################################################################################
    # 圖片轉換模塊
    #
    ##################################################################################
    def imgTopy(self, evn):
        self.tab4_brower_img.clear()
        QMessageBox.question(self, 'waring', '將在當前目錄生成pics.py文件',
                             QMessageBox.Yes, QMessageBox.Yes)

        py_name = 'pics'
        files, filetype = QFileDialog.getOpenFileNames(self,
                                                       "選擇文件",
                                                       self.cwd,  # 起始路徑
                                                       "JPG Files (*.jpg);;PNG Files (*.png);;GIF Files (*.gif);;ICO Files (*.ico);;")
        if len(files) == 0:
            return
        # print(len(files))
        for inx,file in enumerate(files):
            (file_path, tempfilename) = os.path.split(file)
            (filename, extension) = os.path.splitext(tempfilename)
            open_pic = open("%s" % file, 'rb')
            b64str = base64.b64encode(open_pic.read())
            open_pic.close()
            # 注意這邊b64str一定要加上.decode()
            sy = len(files) - inx-1
            with open('%s.py' % py_name, 'a+') as f:
                f.write('%s = "%s"\n' % (filename, b64str.decode()))

            self.tab4_brower_img.append("<font color='red' >"+"正在處理:"+tempfilename+ "</font>"+"<br />"+"當前剩餘:%s張"%sy)

    ##################################################################################
    # 選擇文件模塊
    ##################################################################################
    def slot_btn_chooseMutiFile(self):
        self.textbrower3.clear()
        files, filetype = QFileDialog.getOpenFileNames(self,
                                                       "選擇文件",
                                                       self.cwd,  # 起始路徑
                                                       "PDF Files (*.pdf);;")

        if len(files) == 0:
            # print("\n取消選擇")
            return

        # print("\n你選擇的文件爲:")
        for file in files:
            texts = readPDF(file)
            self.textbrower3.append(texts + "-" * 122)


    ##################################################################################
    # 運行轉換爲word模塊
    ##################################################################################

    def run_pdf_parse(self):
        self.tab4_brower4.clear()
        files, filetype = QFileDialog.getOpenFileNames(self,"選擇文件",self.cwd,"PDF Files (*.pdf);;")

        if len(files) == 0:
            # print("\n取消選擇")
            return

        # print("\n你選擇的文件爲:")
        space = "&nbsp;&nbsp;&nbsp;&nbsp;"
        for file in files:
            texts = parser_pdfs(file)

            (filepath, tempfilename) = os.path.split(file)
            for text in texts:
                self.tab4_brower4.append(
                    "<font color='red' >" + "處理對象:" + tempfilename + "</font>" + "<br />" + "%s頁面數:" % space + str(
                        text[0]) + "<br />" + "%s圖片數:" % space + str(text[1]) + "<br />" + "%s曲線數:" % space +
                    str(text[2]) + "<br />" + "%s水平文本框:" % space + str(
                        text[3]) + "<br />" + "<font color='red' >" + "-" * 40 + "</font>")

    ################################################################################
    # 待完善
    #
    ##################################################################################
    def cmp_text(self):
        test1 = self.cmptext1.toPlainText().strip()
        test2 = self.cmptext2.toPlainText().strip()

        a = list(test1)
        b = list(test2)
        indexs = []
        a_len = len(a)
        b_len = len(b)

        if a_len > b_len:
            index_2 = range(b_len, a_len)
            for i, val in enumerate(b):
                try:
                    if val != a[i]:
                        print(val, i)
                        indexs.append(i)
                except:
                    pass
            indexs.extend(index_2)
            for k in indexs:
                a[k] = "<font color='red' >" + a[k] + "</font>"
                self.cmptext1.setHtml("".join(a))

        elif a_len < b_len:

            index_2 = range(a_len, b_len)

            for i, val in enumerate(a):
                try:
                    if val != b[i]:
                        # print(val, i)
                        indexs.append(i)

                except:
                    pass
            indexs.extend(index_2)
            for m in indexs:
                b[m] = "<font color='red' >" + b[m] + "</font>"
                self.cmptext2.setHtml("".join(b))

        else:
            for i, val in enumerate(a):
                try:
                    if val != b[i]:
                        # print(val, i)
                        indexs.append(i)
                except:
                    pass

            for k in indexs:
                a[k] = "<font color='red' >" + a[k] + "</font>"
                self.cmptext1.setHtml("".join(a))




################################################################################
# 自定義多線程模塊
#
##################################################################################
class Runthread(QtCore.QThread):
    updata_date = QtCore.pyqtSignal(str)

    def __init__(self, *args):
        super(Runthread, self).__init__()
        self.st = args

    def run(self):
        if self.st[0] == 1:
            self.run_junpyter()
        elif self.st[0] == 2:
            self.run_mongo()

        elif self.st[0] == 3:
            self.run_js()
        elif self.st[0] == 4:
            self.run_ht()

    def run_junpyter(self):
        """
        jupyter
        :param starts:
        :return:
        """
        starts = 'jupyter notebook'
        os.system(starts)

    def run_mongo(self):
        os.system('mongod --dbpath d:\data\db')


    def run_js(self):
        """
        jupyter
        :param starts:
        :return:
        """
        starts = 'calc'
        os.system(starts)

    def run_ht(self):
        os.system('mspaint')


################################################################################
# 自定義啓動線程
#
##################################################################################
class MyCalc(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        #############################################################################
        #設置系統托盤
        # minimizeAction = QAction("Mi&nimize", self, triggered=self.hide)
        # maximizeAction = QAction("Ma&ximize", self, triggered=self.showMaximized)
        restoreAction = QAction("&還原", self, triggered=self.showNormal)
        quitAction = QAction("&退出", self, triggered=QApplication.instance().quit)  # 退出APP
        self.trayMenu = QMenu(self)
        # self.trayMenu.addAction(minimizeAction)
        # self.trayMenu.addAction(maximizeAction)
        self.trayMenu.addAction(restoreAction)
        self.trayMenu.addSeparator()
        self.trayMenu.addAction(quitAction)
        self.ui.tray.setContextMenu(self.trayMenu)
        ########################################################
############################################
#忽略退出按鈕
###########################################
    def closeEvent(self, event):
        event.ignore()  # 忽略關閉事件
        self.hide()  # 隱藏窗體

    def yunxing(self, *args):
        #

        self.myThread = Runthread(*args)

        # 6.接收信號併產生回調函數
        self.myThread.updata_date.connect(self.Display)

        self.myThread.start()

    # 7我是回調函數
    def Display(self, data):
        pass



if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    # MainWindow.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
    # MainWindow.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
    # MainWindow.setWindowFlags(Qt::FramelessWindowHint)
    win = MyCalc()
    win.show()

    # ui = Ui_Dialog()
    # ui.setupUi(MainWindow)
    # MainWindow.show()
    os.remove('cs6.html')
    os.remove('mg.ico')
    os.remove('start.jpg')
    os.remove('01-5.jpg')
    sys.exit(app.exec_())


整個項目都在github上面,pyinstall打包user.py文件即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章