【问题标题】:How to load large pkl file in pytq window?如何在 pyqt 窗口中加载大的 pkl 文件?
【发布时间】:2016-04-15 22:17:55
【问题描述】:

加载 PyQt GUI 时,我必须加载存储在本地 HDD 中的非常巨大的 pandas 数据帧。

问题是,GUI 窗口挂起,直到加载大文件完成。

以下是我的示例代码。

我认为我的挂起问题可以通过使用线程和进度条窗口来解决。

但是,我发现的大多数线程示例都使用全局函数和变量。

在我的情况下,self.pkl.file 应该已经加载了数据。所以我应该找到正确的方法将实例扔给线程类/函数。

希望您针对我的情况介绍几个示例代码或指南。

提前谢谢你。

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui 
import pandas as pd 

class Pkl(): 
    def __init__(self): 
        self.file = pd.read_pickle('file.dat') 


class MyWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
        super(MyWindow, self).__init__(parent) 

        self.setWindowTitle('MyWindow') 
        self.show() 
        self.pkl = Pkl() 
    def close_application(self): 

        self.close() 




def main(): 

    app = QtGui.QApplication(sys.argv) 
    GUI = MyWindow() 

    ''' 
    w = QtGui.QWidget() 
    w.resize(250, 150) 
    w.move(300, 300) 
    w.setWindowTitle('Simple') 
    w.show() 
    ''' 

    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main()

【问题讨论】:

    标签: python multithreading pyqt


    【解决方案1】:

    您需要使用 QtCore.QThread,在您的情况下将“pkl”对象传递给应该在线程代码中读取的对象。然后你需要在读取完成时从你的线程发出一个信号。该信号连接到您的主类/主线程,它可以访问 pkl 对象并可以根据需要更新 GUI。

    用于代码检查。 Updating GUI elements in MultiThreaded PyQT

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多