所以我正在用 pygtk gui 编写一个 irc 聊天机器人。该机器人的 GUI 在主脚本中循环运行。当我按下 gui 上的按钮时,它会启动一个线程,打开一个套接字并连接到 irc 通道,当我再次按下它时,它会暂停线程,当我再次按下它时,它会恢复线程。
到这里一切都很好。
但我希望当我按下 gui(主循环)中的按钮来读取文本框并告诉线程通过 irc 连接发送文本时。
我的问题是我无法让主循环告诉线程发送文本。我尝试了类似的方法(测试一下):
def botSendMessage(button):
thread.sendMessage(irc, "test")
handlers = {
"on_bot_send_button_clicked": botSendMessage,
}
builder.connect_signals(handlers)
我已经能够实现我想要的目标。我使用了全局变量。
我建议使用两个线程中都可用的 Queue 对象(在创建时传入)在它们之间传递消息。
在irc线程的主循环中,对队列中需要发送的项目进行非阻塞检查。