当鼠标点击离开Tkinter窗口时,如何关闭Tkinter窗口?

2024-03-29 08:17:05 发布

您现在位置:Python中文网/ 问答频道 /正文

好日子,我是新来的,我已经解决了这个问题几天了Tkinter目前的一个问题,我做了一些研究,关于当鼠标点击离开Tkinter窗口时如何关闭它,但是没有太多信息可以这样做

所以,我的问题是,当鼠标在Tkinter外单击时,如何关闭Tkinter窗口?我已经试过用FocusOut的方法来处理我的问题。但是,我已经尝试使用root绑定,它将关闭窗口,即使我在框架小部件中单击了。然后,我bind使用该帧,当我在Tkinter外部单击时,Tkinter将关闭。因此,到目前为止,我已经证明关闭Tkinter的想法是可行的

然后出现了一个新问题,当我单击窗口中的Combobox小部件时,窗口也将关闭。有没有更好的解决方案来证明这个概念

这是指示我的问题的代码

import tkinter as tk
from tkinter import StringVar, ttk,messagebox


root = tk.Tk()
root.title("Sample Window")
root.minsize(300,350)

info_frame = tk.LabelFrame(root, text = "Information")
info_frame.pack(padx = 5, pady = 5 , fill = "both",expand=True)

tabControl = ttk.Notebook(info_frame)
person1tab = ttk.Frame(tabControl)
tabControl.add(person1tab,text = "Person1")
tabControl.pack(expand=1,fill="both")

person2tab = ttk.Frame(tabControl)
tabControl.add(person2tab,text = "Person2")
tabControl.pack(expand=1,fill="both")

fname_var = tk.StringVar()
lname_var = tk.StringVar()
gender_var = tk.StringVar()
age_var = tk.IntVar()

fname_label = tk.Label(person1tab, text = "First name:").pack(padx=5,pady=3)
fname_entry = tk.Entry(person1tab, textvariable=fname_var).pack(padx=5,pady=3)

lname_label = tk.Label(person1tab, text = "Last name:").pack(padx=5,pady=3)
lname_entry = tk.Entry(person1tab, textvariable=lname_var).pack(padx=5,pady=3)

gender_label = tk.Label(person1tab, text = "Gender:").pack(padx=5,pady=3)
gender_combo =  ttk.Combobox(person1tab, textvariable=gender_var,state='readonly')
gender_combo['values'] = ('Male','Female')
gender_combo.current(0)

gender_combo.pack(padx=5,pady=3)

age_label = tk.Label(person1tab, text = "Age:").pack(padx=5,pady=3)
age_label = tk.Entry(person1tab, textvariable=age_var).pack(padx=5,pady=3)

page2label = tk.Label(person2tab,text = "This is tab 2.").pack(padx=5,pady=3)

def lossfocus(event):
    root.quit()
    pass

tabControl.bind('<FocusOut>', lossfocus)

root.mainloop()

Tags: texttkintervarrootgenderlabelpacktk
1条回答
网友
1楼 · 发布于 2024-03-29 08:17:05

您仍然可以在根窗口上绑定<FocusOut>,但需要检查:

  • 触发此事件的小部件是否为根窗口
  • 此根窗口中没有其他小部件获得焦点:
def lossfocus(event):
    if event.widget is root:
        # check which widget getting the focus
        w = root.tk.call('focus')
        if not w:
            # not widget in this window
            root.destroy()

相关问题 更多 >