我是靠谱客的博主 沉默秋天,最近开发中收集的这篇文章主要介绍pyqt5中防止主线程阻塞,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.pyqt5刷新页面代码:

QApplication.processEvents()

2.今天想做个加载动画,网上搜到的例子大概如下:

self.label = QLabel()
self.loading_gif = QMovie('loading.gif')
self.label.setMovie(self.loading_gif)
self.loading_gif.start()

代码很简单,对我而言,还缺一些东西,比如,加载完怎么处理,删除还是换成其它图片,我想要的效果比如我加载一个数据量比较大的csv,加载的时候我想展示加载动画,加载完,我想展示一个对勾动画,然后消失,这个怎么做。

3.子窗口的创建。pyqt中有三种窗口,mainwindow,dialog,widget,简单查了一下三者的关系,mainwindow和dialog都是继承widget的,mainwindow添加了一些通用的模块,比如菜单栏,工具栏,状态栏,这个是我们使用windows的大多数软件都有的,所以我们如果想要创建一个相对比较正式的项目,可以用mainwindow,dialog只是个对话框,我看了一下,界面比较简洁,默认没有最大最小化按钮,而是加了个帮助按钮,适合做提示框,所以我感觉不适合做子窗口,创建子窗口用widget比较好,虽然widget是父类,但是我看界面比dialog要正式,有最大最小化按钮。所以我选了widget做子窗口。顺便贴下代码:

from ctypes import alignment
import os
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QGridLayout,
                             QHBoxLayout, QVBoxLayout,QLabel, QComboBox,QPushButton,
                             QDateEdit, QSpacerItem,QFrame, QSizePolicy, QSplitter,
                             QRadioButton, QGroupBox,QCheckBox,QLineEdit, QAction,
                             QFileDialog,QListView,QListWidget,QListWidgetItem,
                             QProgressBar,QProgressDialog,QMessageBox,QAbstractItemView,QDialog)
from PyQt5.QtCore import Qt, QDate, QRect
from PyQt5 import QtCore
from PyQt5.QtGui import QIcon, QBitmap, QPainter, QPixmap, QCursor, QMovie
import random
from utils import *
from analysis_daily import AnalysisDaily
class DailyAnalysisDialog(QWidget):

    def __init__(self,data):
        super().__init__()
        self.total_data = data
        self.init_ui()
        self.show()
    

    def init_ui(self):
        self.qssfile = "./style/style.qss"
        self.qssstyle = read_qss(self.qssfile)
        self.setStyleSheet(self.qssstyle)
        self.setWindowTitle("每日分析")
        self.resize(800,600)
        wlayout = QVBoxLayout()

        jihua_wlayout = QHBoxLayout()

        self._jihua_layer(jihua_wlayout)
        wlayout.addLayout(jihua_wlayout,0)
        self.setLayout(wlayout)
    

    def _jihua_layer(self,jihua_wlayout):
        r = random.randint(20,230)
        g = random.randint(20,230)
        b = random.randint(20,230)
        
        self.jihua_text = QLineEdit()
        self.jihua_text.setStyleSheet("color:rgb(%d,%d,%d)" % (r,g,b))
        self.jihua_text.setReadOnly(True)
        self.jihua_text.setText("极化曲线")
        self.jihua_button = QPushButton("选择极化曲线")
        self.jihua_button.clicked.connect(self.select_jihua)

        self.begin_button = QPushButton("开始分析")
        self.begin_button.clicked.connect(self.begin_analysis)
        jihua_wlayout.addWidget(self.jihua_text,0,Qt.AlignTop)
        jihua_wlayout.addWidget(self.jihua_button,0,Qt.AlignTop)
        jihua_wlayout.addWidget(self.begin_button,0,Qt.AlignTop)
        #jihua_wlayout.setSpacing(20)
    
    def select_jihua(self):
        filename=QFileDialog.getOpenFileNames(self,'选择文件',os.getcwd(), "All Files(*);;eg Files(*.xlsx *.csv *.MDF)")
        self.f_list = filename[0]
        if self.f_list:
            jihua_file = self.f_list[0]
            print(jihua_file)
    
    def begin_analysis(self):
        a = AnalysisDaily(self.total_data)
        a.on_off_count()
        a.istka_stable_filter15(45)
        print(a.need_data)
        a.air_sig_statistics(45)
        a.h2_sig_statistics(45)
        a.hasub_statistics(45)
        a.cvm_mean(45)
        res_data = {}
        
        for k,v in a.statistics_data.items():
            for nk,nv in v.items():
                res_data[nk] = nv
        print(res_data)
        df = pd.DataFrame(res_data,index=[0])
        df = df.T
        df.to_csv("res.csv")



if __name__ == "__main__":
    app = QApplication(sys.argv)
    ad = DailyAnalysisDialog([])
    sys.exit(app.exec_())

最后

以上就是沉默秋天为你收集整理的pyqt5中防止主线程阻塞的全部内容,希望文章能够帮你解决pyqt5中防止主线程阻塞所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部