python - 在线程中显示对话框

标签 python linux multithreading pygtk

我有一个 pygtk add,它有一个 gtk.Button() ,当按下它时必须完成让我们说 5 秒的工作。因此,想到将 信号处理程序中的时间密集型函数实现为线程。

首先,我在开头添加了 gtk.gdk.threads_init()。

我的信号处理程序是 def send_sms(),其中我有另一个函数 def send_sms_mycantos(),我将其称为线程。

threading.Thread(target = self.send_sms_mycantos, args=(phone_no, message_text, username, password)).start()

我还有一个显示对话框的功能。

def dialog_notification(self, message, dialog_type):
    dlg = gtk.MessageDialog(self.window, gtk.DIALOG_DESTROY_WITH_PARENT, dialog_type, gtk.BUTTONS_CLOSE, message)
    dlg.run()
    dlg.destroy()

现在,如果我在我的线程中调用上面的函数

self.dialog_notification("Message sent successfully", gtk.MESSAGE_INFO)

我收到这个错误。

SMSSender.py: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.

这是实现线程的正确方法吗?我究竟做错了什么。错误就像线程不知道 Xserver 正在运行。

最佳答案

最简单的方法是在主 gtk 线程中运行 self.dialog_notification()。只需在您的线程中添加 gobject.idle_add(self.dialog_notification, args...)

关于python - 在线程中显示对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564560/

相关文章:

python - 如何在redis中获取保存的值并再次使用它(django)

python - 哪些工具用于编写 Python Web 应用程序(django)的验收测试?

java - 在多线程执行期间使用 TestNG 生成 Cucumber ExtentReport

python - 在这个例子中我需要使用线程锁吗?

python - 在python中求小矩阵

python - easy_seq2seq中的train()方法什么时候停止?

linux - 在 shell 脚本中查找命令错误

linux - 在 Unix 或 Gnu/Linux 上减少进程的权限

linux - 在不相关的可执行文件 linux 中调用函数

java - 无效的线程访问