gpt4 book ai didi

python - pyqt的进度条

转载 作者:行者123 更新时间:2023-11-28 23:02:38 28 4
gpt4 key购买 nike

我有一个运行多个线程的程序,其中一个线程控制界面,另一个线程每隔几秒启动一些功能。我希望计时线程更新进度条,但当我这样做时,我得到:

X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165
Extension: 150 (RENDER)
Minor opcode: 25 (RenderCompositeGlyphs32)
Resource id: 0x25
X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165
Extension: 150 (RENDER)
Minor opcode: 25 (RenderCompositeGlyphs32)
Resource id: 0x25
X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165
Extension: 150 (RENDER)
Minor opcode: 25 (RenderCompositeGlyphs32)
Resource id: 0x25
X Error: RenderBadGlyphSet (invalid GlyphSet parameter) 165
Extension: 150 (RENDER)
Minor opcode: 25 (RenderCompositeGlyphs32)
Resource id: 0x25
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread

这是我的代码:

#!/usr/bin/python
from PyQt4 import QtCore, QtGui
import time

class WTrainning(wMeta.WMeta, QtGui.QWidget):

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

def createUI(self):

...
self.progressBar = QtGui.QProgressBar(self)
self.progressBar.setGeometry(QtCore.QRect(30, 70, 481, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
QtCore.QObject.connect(self.progressBar, QtCore.SIGNAL("valueChanged(int)"), self.progressBar.setValue)
...

def modifyBarr(self, number):
self.progressBar.setValue(number)

class Crono(QtCore.QThread):

def __init__(self, parent):

QtCore.QThread.__init__(self,parent)


def checkStatus(self):

for x in range(1,101):
self.wtobject.modifyBarr(x)
time.sleep(1)

我曾尝试使用信号(新旧版本)并为 UI 更新创建专用线程,但没有任何效果。我正在使用 python 2.6.6 和 pyqt 4.7.4

最佳答案

您必须像这样为 Crono 对象定义一个信号:

class Crono(QtCore.QThread):
tick = QtCore.pyqtSignal(int, name="changed") #New style signal

def __init__(self, parent):
QtCore.QThread.__init__(self,parent)

def checkStatus(self):
for x in range(1,101):
self.tick.emit(x)
time.sleep(1)

然后将它连接到进度条的一个插槽。

class WTrainning(wMeta.WMeta, QtGui.QWidget):

def __init__(self):
super(WTrainning, self).__init__()
self.crono = Crono()

def createUI(self):
#Create GUI stuff here

#Connect signal of self.crono to a slot of self.progressBar
self.crono.tick.connect(self.progressBar.setValue)

您所做的是将 progressBar 的 SIGNAL valueChanged 连接到它自己的 SLOT setValue

关于python - pyqt的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9682376/

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