2016-04-15 33 views
0

PyQt GUIがロードされているときに、ローカルHDDに格納された非常に大きなパンダデータフレームをロードする必要があります。大きなpklファイルをpytqウィンドウに読み込む方法は?

問題は、巨大なファイルのロードが完了するまで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() 

答えて

0

あなたはそれをスレッド化コードに読まれるべきである「PKL」オブジェクトを渡すあなたのケースで、QtCore.QThreadを使用する必要があります必要があります。次に、読み込みが完了したらスレッドからシグナルを送出する必要があります。このシグナルはメインクラス/メインスレッドに接続され、pklオブジェクトにアクセスし、必要に応じてGUIを更新することができます。

コードチェックのため。 Updating GUI elements in MultiThreaded PyQT

関連する問題