如何从工作线程打开一个对话框?

时间:2012-08-15 13:10:07

标签: multithreading pyside

我有一个PySide应用程序,它在后台QThread执行任务。有时在任务的中间有一个步骤需要用户通过对话框输入。我无法从工作线程调用代码QtGui.QinputDialog.getText

我有这样的事情:

class Communicate(QtCore.QObject):
   signal = QtCore.Signal((str, str))

def ask_user(title, text):
   return QtGui.QInputDialog.getText(None, title, text)

(然后在实际完成工作的函数中)

def longtask():
   dialogneeded = network_io()
   if dialogneeded:
      x = Communicate()
      x.signal.connect(ask_user)
      x.signal.emit("A title", "Some text")
   more_long_work_to_do()

我知道这段代码甚至没有看到用户给出的值,但我只想尝试一些至少可以显示对话框的内容。

这是我得到的错误:

[xcb] Extra reply data still left in queue
[xcb] This is most likely caused by a broken X extension library
[xcb] Aborting, sorry about that.
python: xcb_io.c:575: _XReply: Assertion `!xcb_xlib_extra_reply_data_left' failed.
Aborted

0 个答案:

没有答案