【发布时间】:2021-08-30 19:23:04
【问题描述】:
我有一个程序运行许多线程,其中一个控制界面,另一个每隔几秒钟启动一些功能。我希望计时线程更新进度条,但是当我这样做时,我得到:
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
【问题讨论】:
-
你做错了。您绝对应该为此使用信号和插槽。
-
您确实应该使用信号和插槽。您能提供您尝试使用信号的代码吗?
-
QtCore.QObject.connect(self.progressBar, QtCore.SIGNAL("valueChanged(int)"), self.progressBar.setValue)
-
请用信号/槽方法更新问题。但据我所知,你连接了错误对象的错误信号和插槽。
-
现在更新了。我认为信号是正确的,因为它是参考指南中唯一可用于 progressBars 的信号。错误可能是在插槽选举中。