簡體   English   中英

Python PyQt4 progressbar凍結GUI

[英]Python PyQt4 progressbar Freezing GUI

以下代碼計算了PyQt4進度條的最高tp 99%,我希望我的GUI 不會凍結,因為它們的最高計數是99%。 如果可能,我希望沒有自定義類或函數就可以這樣做。 我知道使用類很好,但是對於這小段代碼,我不想創建一個類。 根據我所讀的內容,可能有一個update()函數可以完成此任務...請告知我是否在正確的軌道上

import sys
import time
from PyQt4 import QtGui
from PyQt4 import QtCore


app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(400, 200)
widget.setWindowTitle('simple')
widget.show()

shift = 0
cntControl = 5
barra = [0] * cntControl
for i in range(cntControl):
    shift = shift + 10
    barra[i] = QtGui.QProgressBar(widget)
    barra[i].show()
    barra[i].setMinimum(0)
    barra[i].setMaximum(10000)
    barra[i].setGeometry(QtCore.QRect(10, shift, 200, 10))


for a in range(10000):
    for i in range(cntControl):
        barra[i].setValue(a)



sys.exit(app.exec_())

嘗試更改您的for循環:

while True:
    for a in range(10000):
        time.sleep(0.0001)
        for i in range(cntControl):
            barra[i].setValue(a)

如果對我有用。 while循環持續不斷地移動小節。 如果您只想在到達終點后清潔條,則應使用reset:

 PySide.QtGui.QProgressBar.reset() Reset the progress bar. The progress bar “rewinds” and shows no progress 

在OP注釋后更新:如果希望gui在進入長循環或其他操作時響應,則應使用python 線程模塊QThreads

我真的根本無法使線程正常工作。。。我可以發布線程嘗試,這對我(現在很累)的眼睛來說是完美無缺的。

但是,我已經能夠周到http://zetcode.com/tutorials/pyqt4/widgets/的progressbar示例,並提供了以下代碼...解決了GUI中凍結的問題:

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.setWindowTitle('ProgressBar')
        self.setGeometry(300, 300, 250, 150)

        self.pbar = [0] * 3
        self.timer = [0] * 3
        self.step = [0] * 3
        self.shift = 0
        for i in range(3):
            self.shift = self.shift + 30
            self.pbar[i] = QtGui.QProgressBar(self)
            self.pbar[i].setGeometry(30, self.shift, 200, 25)

            self.timer[i] = QtCore.QBasicTimer()
            self.step[i] = 0
            self.timer[i].start(100, self)


    def timerEvent(self, event):
        for i in range(3):
            if self.step[i] >= 100:
                self.timer[i].stop()
                return
            self.step[i] = self.step[i] + 1
            self.pbar[i].setValue(self.step[i])




app = QtGui.QApplication(sys.argv) ex
= Example() ex.show() app.exec_()

我不知道為什么它起作用,這可能不是一件好事。 我猜想這可能與super(Example, self).__init__()和pyqt4使用的自定義計時器有關。 我確實希望在沒有函數或類的情況下執行此操作,但不確定這樣做是否可行。 如果您認為是這樣,請隨時發布!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM