这可能是一个有点长的帖子,所以,提前感谢你能陪我到最后。这是问题所在,(我认为这是一个相当基本的问题,只是我对 PiSide 和 Qt 的缺乏经验让我更难。)我有一个带有一个菜单项的主窗口,假设是“进程”。代码如下 -
from PySide import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow, AppObj):
.
.
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
.
.
.
self.actionProcess = QtGui.QAction(MainWindow)
self.actionProcess.setObjectName("actionProcess")
self.actionProcess.triggered.connect(self.myappObj.menuActionProcess)
.
这里 self.myappobj 指的是我创建的一个应用程序类,它充当我的应用程序的主要逻辑控制器。编码 -
from PySide import QtCore, QtGui
from MainWindow import Ui_MainWindow
class App(QtGui.QDialog):
def __init__(self, parent=None):
self.__mainWindow = QtGui.QMainWindow()
self.__mainWindowDesignContext = Ui_MainWindow()
self.__mainWindowDesignContext.setupUi(self.__mainWindow, self)
self.__mainWindow.show()
def menuActionProcess(self):
self.processThread = BatchProcesser()
self.progressBar = QtGui.QProgressBar()
statusBar.addWidget(self.progressBar)
self.progressBar.show()
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(100)
QtCore.QObject.connect(self.processThread, QtCore.SIGNAL("progress(int)"),self.progressBar, QtCore.SLOT("setValue(int)"), QtCore.Qt.DirectConnection)
if not self.processThread.isRunning():
self.processThread.exiting = False
self.processThread.start()
因此,很容易看出我在这里要做的是创建一个主窗口。在此处添加一个名为“Process”的菜单,单击该菜单应触发应用程序类中的回调 menuActionProcess 方法,我在其中制作进度条并将其与主窗口的状态栏附加(实际代码还有很多其他内容,我在这里给出的是重新排列为伪示例的必要部分),最后在上面代码中提到的 BatchProcesser 类中,我正在这样做 -
from PySide.QtGui import *
from PySide.QtCore import *
class BatchProcesser(QThread):
__errorHappened = False
def __init__(self, parent=None):
QThread.__init__(self, parent)
self.exiting = False
def run(self):
for a in range(101):
print a
QThread.msleep(100)
self.emit(SIGNAL("progress(int)"), a)
print a
据我了解,这应该在与主线程不同的线程中更新附加到状态栏的进度条。这将允许用户自由地与 GUI 交互。
现在,如果我尝试冲洗它,一切都很好,直到我点击“处理”菜单。然后,进度条平息但不更新,控制台充满错误 -
0 QPixmap:在 GUI 线程之外使用像素图是不安全的
QPixmap:在 GUI 线程之外使用像素图是不安全的
QPixmap:在 GUI 线程之外使用像素图是不安全的
QPixmap:在 GUI 线程之外使用像素图是不安全的
0
1
QPixmap:在 GUI 线程之外使用像素图是不安全的
QPixmap:在 GUI 线程之外使用像素图是不安全的
QPixmap:在 GUI 线程之外使用像素图是不安全的
QPixmap:在 GUI 线程之外使用像素图是不安全的
[xcb] 出队时队列中有未知请求
[xcb] 这很可能是一个多线程客户端并且 XInitThreads 没有被调用
[xcb] 中止,抱歉。
python: ../../src/xcb_io.c:178: dequeue_pending_request: 断言 `!xcb_xlib_unknown_req_in_deq' 失败。
中止(核心转储)
我非常需要任何帮助。我无法找出和/ot 指出错误的原始原因并进行修复。