如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?

Posted

技术标签:

【中文标题】如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?【英文标题】:How can I run a function without interrupting my tkinter mainloop, but also send information from that function to widgets in my mainloop? 【发布时间】:2019-07-30 14:23:17 【问题描述】:

抱歉,如果以前有人问过这个问题,但我找不到明确的答案。我正在编写一个 GUI 来从树莓派控制电机,它在触摸屏上。我编写了一些代码,当 Entry 小部件成为焦点时,它会打开内置的火柴盒键盘,但这会在后台停止我的整个 tkinter 窗口,这意味着用户在关闭之前无法看到他们输入的内容出现在 Entry 中键盘,而且当它挂在后台时,屏幕经常会撕裂并且看起来很糟糕。反正有没有运行这个命令: def createNumpad(event=none): os.system('matchbox-keyboard numpad') 以便在键盘打开时 tkinter 窗口不会冻结?谢谢!

【问题讨论】:

***.com/a/49307676/11703358;您可以通过在该小部件上绑定“”来捕捉 Tkinter 的“on_focus”:entry.bind("<Enter>", self.on_focus) 和“”失去焦点(当 Thinter 重新获得焦点,但 Entry 没有获得焦点时)。 对不起,如果我是个白痴,但这个例子不是为 tkinter 编写的? 【参考方案1】:

这是来自 SO answer 的相关代码已更改为适合 Tkinter:

import subprocess

def createNumpad(event)
    try:
        subprocess.Popen(["matchbox-keyboard", "numpad"])
    except FileNotFoundError:
        pass

def deleteNumpad(event):
    subprocess.Popen(["killall","matchbox-keyboard"])

#
entry.bind("<Enter>", createNumpad)
entry.bind("<Leave>", deleteNumpad)

【讨论】:

以上是关于如何在不中断 tkinter 主循环的情况下运行一个函数,同时将该函数的信息发送到我的主循环中的小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 tkinter 打开控制台窗口的情况下运行 Python 脚本?

在 Tkinter 主循环期间录制 OpenCV 视频

如何在不违反主键约束的情况下插入具有循环引用的实体框架

如何在 pthread 中创建准确的纳秒延迟以及如何在不中断的情况下运行程序的 pthread 部分?

如何在不使用延迟的情况下运行模式()

Qt:如何在不阻塞主线程的情况下播放声音?