如何在pytq窗口中加载大型pkl文件?

时间:2016-04-15 14:02:13

标签: python multithreading pyqt

加载PyQt GUI时,我必须加载存储在本地硬盘中的非常庞大的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()

1 个答案:

答案 0 :(得分:0)

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

进行代码检查。 Updating GUI elements in MultiThreaded PyQT