区块链技术博客
www.b2bchain.cn

Tk / Tkinter:检测应用程序失去焦点 – python程序员分享

本文介绍了Tk / Tkinter:检测应用程序失去焦点 – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我正在申请Tkinter。在应用程序中,我想弹出一个上下文菜单,这是使用Tk.Menu.post()完成的。

当应用程序失去焦点时,我不知道如何使此菜单消失。我需要执行此操作,因为即使在切换到另一个窗口时,菜单仍停留在最上面,而使菜单保留为“工件”。

我在菜单上放置了一个<FocusOut>事件,如果菜单具有焦点并且用户将焦点移至另一个应用程序,则会触发该事件。这很好。

如果主应用程序窗口具有焦点,该怎么办?我可以在应用程序窗口中放置一个<FocusOut>事件,以关闭菜单。但是,当我将注意力集中在菜单上时,该菜单最终被调用,从而关闭了菜单。该菜单是使用parent作为主要应用程序创建的,因此,我不确定为什么当菜单获得焦点时,主应用程序上的<FocusOut>甚至会被触发。

如何区分主应用程序窗口对其他应用程序失去焦点与菜单失去焦点?

我不想使用tk_popup(),因为我希望用户继续向主窗口提供输入。 (菜单的使用是可选的)。

感谢@Brad Lanam,我想出了一个解决方案,其中包括:

from Tkinter import *  class App(Tk):     def __init__(self, *args, **kwargs):         Tk.__init__(self, *args, **kwargs)          self.entry = Entry(self)         self.entry.grid(padx=30, pady=30)         self.entry.focus_set()         self.entry.bind("<Tab>", self.put_menu)         self.entry.bind("<Down>", self.set_focus_on_menu)          self.menu = Menu(self, tearoff=False)         self.menu.add_command(label="test")         self.menu.bind("<FocusOut>", self.destroy_menu)           self.bind("<FocusIn>", self.app_got_focus)         self.bind("<FocusOut>", self.app_lost_focus)         self.bind("<3>", self.put_menu)       def app_got_focus(self, event):         self.config(background="red")      def app_lost_focus(self, event):         self.config(background="grey")          ######## SOLUTION BEGIN #########         if self.focus_get() != self.menu:             self.destroy_menu(event)         ######## SOLUTION END ###########      def set_focus_on_menu(self, event):         self.menu.focus_set()      def menu_got_focus(self, event):         self.menu.activate(0)      def put_menu(self, event):         self.menu.post(self.winfo_x() + self.entry.winfo_x(), self.winfo_y() + self.entry.winfo_y()+20)      def destroy_menu(self, event):         self.menu.destroy()  app = App()  app.mainloop() 

参考方案

self.focus_get()将返回具有焦点的对象,该对象可用于区分接收焦点的菜单与其他应用程序。

例如,要在焦点移到另一个应用程序时删除菜单:

def app_lost_focus(self, event):     if self.focus_get() != self.menu:         self.destroy_menu(event) 

我正在尝试使用Python和Tkinter创建我的第一个GUI。我想要一个背景图像,该图像随窗口大小以及在背景顶部的两个标签相应地调整大小,两个标签都放置在窗口的中间位置。两个标签是“全名”和“教育”,如下面的代码所示。当前,我正在使用pack()方法,并且一直在使用here中的窗口大小调整代码。我的问题是:如何使标签与背景图像重叠(代码中也包含标签)?用我…

我有一个程序,其中我制作了带边框的标签,但其带边框的位置太接近文本。我想在“边框”和“标签文本”之间给出间距。代码如下。from tkinter import * import tkinter as tk win = Tk() win.title("Labels") win.geometry("800×600+50+50&#03…

我在tkinter窗口中有一个图像背景,结果发现当您创建标签或框架时,默认值不会清除,而是灰色(它看起来很清晰,因为默认背景是相同的灰色)。最初我对框架有同样的问题,但是我将背景放在框架的前面,所以它们被隐藏了。但是,我无法使用标签来完成此操作,因为它们包含我要查看的文本。因此,是否可以使灰色不显示/将标签设置为“清除”(尝试使用bg =“ clear”和b…

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Tk / Tkinter:检测应用程序失去焦点 – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们