gpt4 book ai didi

python - PyQt 进度条直到 100% 才更新或出现

转载 作者:太空狗 更新时间:2023-10-29 21:28:45 24 4
gpt4 key购买 nike

编辑:PyQt4 进度条上有许多类似的帖子没有更新。他们都关注线程问题以及程序实际更新窗口的位置。虽然有用,但我的代码结构如此之大以至于回复不切实际。此处给出的公认答案简单明了且有效。

我在 Win 7 x64 机器上使用 Python 2.7 和 PyQT 4。

我正在尝试清除窗口中的一个小部件,一个“接受”按钮,查看代码,并将其替换为进度条。

即使我在进入处理循环之前关闭了“接受”按钮并添加了进度条。窗口仅在循环结束后更新,进度条直接跳到 100%。

我的代码,

from PyQt4 import QtCore, QtGui
import sys
import time

class CentralWidget(QtGui.QWidget):

def __init__(self, parent=None):
super(CentralWidget, self).__init__(parent)

# set layouts
self.layout = QtGui.QVBoxLayout(self)

# Poly names
self.pNames = QtGui.QLabel("Import file name", self)
self.polyNameInput = QtGui.QLineEdit(self)

# Polytype selection
self.polyTypeName = QtGui.QLabel("Particle type", self)
polyType = QtGui.QComboBox(self)
polyType.addItem("")
polyType.addItem("Random polyhedra")
polyType.addItem("Spheres")
polyType.addItem("Waterman polyhedra")
polyType.activated[str].connect(self.onActivated)

# Place widgets in layout
self.layout.addWidget(self.pNames)
self.layout.addWidget(self.polyNameInput)
self.layout.addWidget(self.polyTypeName)
self.layout.addWidget(polyType)
self.layout.addStretch()

# Combobox choice
def onActivated(self, text):

if text=="Random polyhedra":
self.randomPolyhedra(text)
if text=="Spheres": # not implementaed yet
self.polyTypeName.setText("Not implemented yet.")
self.polyTypeName.adjustSize()
if text=="Waterman polyhedra": # not implementaed yet
self.polyTypeName.setText("Not implemented yet.")
self.polyTypeName.adjustSize()

# New options for random polyhedra choice
def randomPolyhedra(self, text):

self.polyNumberLbl = QtGui.QLabel("How many: ", self)
self.polyNumber = QtGui.QLineEdit(self)
self.acceptSeed = QtGui.QPushButton('Accept') # Accept button created
self.acceptSeed.clicked.connect(lambda: self.ranPolyGen())
self.layout.addWidget(self.polyNumberLbl)
self.layout.addWidget(self.polyNumber)
self.layout.addWidget(self.acceptSeed) # Accept button in layout
self.randFlag = True
self.polyTypeName.setText(text)
self.polyTypeName.adjustSize()

# Act on option choices for random polyhedra
def ranPolyGen(self):

polyCount = int(self.polyNumber.text())
self.progressBar = QtGui.QProgressBar() # Progress bar created
self.progressBar.setMinimum(1)
self.progressBar.setMaximum(polyCount)
self.acceptSeed.close() # Accept button closed
self.layout.addWidget(self.progressBar) # Add progressbar to layout
for poly in range(1, polyCount+1):
time.sleep(1) # Calls to main polyhedral generating code go here
print poly
self.progressBar.setValue(poly)
self.doneLbl = QtGui.QLabel("Done", self)
self.layout.addWidget(self.doneLbl)

# Creates GUI
class Polyhedra(QtGui.QMainWindow):

def __init__(self):

super(Polyhedra, self).__init__()

# Place central widget in layout
self.central_widget = CentralWidget(self)
self.setCentralWidget(self.central_widget)

# Set up window
self.setGeometry(500, 500, 300, 300)
self.setWindowTitle('Pyticle')
self.show()

# Combo box
def onActivated(self, text):

self.central_widget.onActivated(text)


def main():

app = QtGui.QApplication(sys.argv)
poly = Polyhedra()
sys.exit(app.exec_())


if __name__ == '__main__':
main()

下面是循环执行期间和完成后的图片。

我不认为我已经了解 addWidget() 方法。我的印象是这会将另一个小部件添加到当前布局(此处为 vbox 布局)并且 .close() 方法在指示时删除了一个小部件。

我错过了什么?

During loop execution & after.

最佳答案

您可以添加:

from PyQt4.QtGui import QApplication

然后在你的 for 循环中:

QApplication.processEvents() 

您的应用实际上变得无响应,您需要调用 processEvents() 来处理事件并重新绘制图形用户界面。我不太熟悉 pyqt,但我想另一种选择是使用线程。

关于python - PyQt 进度条直到 100% 才更新或出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com