2017-07-17 15 views
-1

私はpyqtで私の非常に簡単なテストアプリケーションで作業するためにプログレスバーを作ろうとしていますが、残念ながら私が見たexamplesのいくつかを実装する方法彼らは私の頭の上に行くので、私の初心者の質問に耐えてください。初心者のためのPyQtプログレスバーを説明する簡単な方法

はのは、私は非常に単純なQMainWindow

class Window(QtGui.QMainWindow): 

    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(750, 450, 400, 200) 
     self.setFixedSize(self.size()) 
     btn1 = QtGui.QPushButton("Convert", self) 
     btn1.move(210,171) 
     btn1.clicked.connect(self.output_convert) 

    def output_convert(self): 
     #very long process to convert a txt file to excel 
     #Here is where I would like to implement a progress bar 

def run(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = Window() 
    app.exec_() 

run() 

どのように私はoutput_convertで少なくともパルスするプログレスバーを実装することができますがあるとしましょうか? 実際に私を混乱させるのは、exampleのコードをどのように呼び出して実行するのかです。サブクラス化せずに純粋に関数で行うことができますか?それはoutput_convertコードに依存していますか? TLDR:非常に長いコード(初心者向け)を実行しているときに、どのようにプログレスバーを実装できますか?私はそれが部分的にここで働いてしまった一日は、私のコード

class Window(QtGui.QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(750, 450, 400, 200) 
     self.setFixedSize(self.size()) 
     btn1 = QtGui.QPushButton("Convert", self) 
     btn1.move(210,171) 
     btn1.clicked.connect(self.progbar) 

    def progbar (self): 
     self.prog_win = QDialog() 
     self.prog_win.resize(400, 100) 
     self.prog_win.setFixedSize(self.prog_win.size()) 
     self.prog_win.setWindowTitle("Processing request") 
     self.lbl = QLabel(self.prog_win) 
     self.lbl.setText("Please Wait. . .") 
     self.lbl.move(15,18) 
     self.progressBar = QtGui.QProgressBar(self.prog_win) 
     self.progressBar.resize(410, 25) 
     self.progressBar.move(15, 40) 
     self.progressBar.setRange(0,1) 
     self.myLongTask = TaskThread() 

     #I think this is where I am wrong 
     self.prog_win.show() 
     self.myLongTask.taskFinished.connect(self.onStart) 
     self.output_settings() 

    def onStart(self): 
     self.progressBar.setRange(0,0) 
     self.myLongTask.start() 

    def output_convert(self): 
     #very long process to convert a txt file to excel 

class TaskThread(QtCore.QThread): 
    taskFinished = QtCore.pyqtSignal() 
    def run(self): 
     time.sleep(3) 
     self.taskFinished.emit() 

def run(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = Window() 
    app.exec_() 
run() 

UPDATE 1 後、私は今、私が欠けているものを見ると、私が本当に必要なのThreadingであることができます。私は周りを読んで、誰もがマルチスレッドが必要であると言って、サブクラス化は悪い考えです。処理中に進行状況バーがハングアップするため、部分的に機能します。

答えて

0
 self.progressBar = QtWidgets.QProgressBar(self.centralWidget) 
     self.progressBar.setGeometry(QtCore.QRect(150, 140, 481, 37)) 
     self.progressBar.setStyleSheet("your values") 
     self.progressBar.setProperty("value", 70) 
     self.progressBar.setObjectName("progressBar") 

これは私が使用しているプログレスバーのコードで、 最初の行には、プログレスバー我々の場合には、QtWidgetのタイプを定義し、これが可能になることを示して引数、中央のウィジェットを、とり中央のウィジェットの一部、 の設定ジオメトリは、位置とサイズです。 設定されたスタイルシートは、色と素材を指定する場所です。 setプロパティー関数は、プログレスバーの値または塗りつぶしを設定するために使用されます。これは変更したいものです。

ほとんどの場合、このウィジェットはOSに依存します。つまり、ウィンドウを使用している場合、デフォルトで進捗バーにパルスを出すウィンドウが表示されます。しかし、例えばLinuxのような他のオペレーティングシステムでは、setstyle()関数を使ってウィジェットのデフォルトのスタイルを設定する必要があります。

+0

私は 'setstyle()'について気づいていませんでした。クロスプラットフォームアプリケーションを配布する予定だったので、ありがとうございました。これは実際に私がどのように非常に長いプロセスでそれを実装するかについての私の問題に答えるものではありません。理解しやすいソースがありますか? –

関連する問題