Python 2.7 tKmessagebox超时后自动选择

Python 2.7 tKmessagebox超时后自动选择,python-2.7,tkinter,tkmessagebox,Python 2.7,Tkinter,Tkmessagebox,我想显示一个带有“是”或“否”选项的messagebox。如果用户在超时(例如:5秒)内未选择任何带有选项的messagebox,则messagebox应使用默认的“是”选项关闭。我怎样才能做到呢 下面是我使用的代码,但它的resp值始终为False from Tkinter import * import tkMessageBox time = 2000 def status(): resp=True root.destroy()

我想显示一个带有“是”或“否”选项的messagebox。如果用户在超时(例如:5秒)内未选择任何带有选项的messagebox,则messagebox应使用默认的“是”选项关闭。我怎样才能做到呢

下面是我使用的代码,但它的
resp
值始终为False

    from Tkinter import *
    import tkMessageBox

    time = 2000
    def status():
       resp=True
       root.destroy()
    root = Tk()
    root.withdraw()
    root.after(time,status)
    resp=tkMessageBox.askyesno(title='Test',message='Click Yes otherwise No',default=tkMessageBox.YES)
    print resp
    root.mainloop()

使用默认的
askyesno
messagebox,您无法执行此操作。可以使用自定义对话框执行此操作,例如:

import Tkinter as tk

class MyDialog(tk.Toplevel):

    def __init__(self, parent, text):

        tk.Toplevel.__init__(self, parent)
        tk.Label(self, text=text).grid(row=0, column=0, columnspan=2, padx=50, pady=10)

        b_yes = tk.Button(self, text="Yes", command=self.yes, width=8)
        b_yes.grid(row=1, column=0, padx=10, pady=10)
        b_no = tk.Button(self, text="No", command=self.no, width=8)
        b_no.grid(row=1, column=1, padx=10, pady=10)

        self.answer = None
        self.protocol("WM_DELETE_WINDOW", self.no)

    def yes(self):
        self.answer = "Yes"
        self.destroy()

    def no(self):
        self.answer = "No"
        self.destroy()

def popup():
    d = MyDialog(root, "Click Yes or No")
    root.after(5000, d.yes)
    root.wait_window(d)  
    print d.answer

root = tk.Tk()
tk.Button(root, text="Show popup", command=popup).pack()
root.mainloop()

使用默认的
askyesno
messagebox,您无法执行此操作。可以使用自定义对话框执行此操作,例如:

import Tkinter as tk

class MyDialog(tk.Toplevel):

    def __init__(self, parent, text):

        tk.Toplevel.__init__(self, parent)
        tk.Label(self, text=text).grid(row=0, column=0, columnspan=2, padx=50, pady=10)

        b_yes = tk.Button(self, text="Yes", command=self.yes, width=8)
        b_yes.grid(row=1, column=0, padx=10, pady=10)
        b_no = tk.Button(self, text="No", command=self.no, width=8)
        b_no.grid(row=1, column=1, padx=10, pady=10)

        self.answer = None
        self.protocol("WM_DELETE_WINDOW", self.no)

    def yes(self):
        self.answer = "Yes"
        self.destroy()

    def no(self):
        self.answer = "No"
        self.destroy()

def popup():
    d = MyDialog(root, "Click Yes or No")
    root.after(5000, d.yes)
    root.wait_window(d)  
    print d.answer

root = tk.Tk()
tk.Button(root, text="Show popup", command=popup).pack()
root.mainloop()

相关:这里我只想关闭MessageBox。根目录不应该被破坏。是否只销毁tkMessageBox?我担心这是不可能的,因为您没有获得对实际对话框的引用,您必须创建自己的。相关:这里我只想关闭MessageBox。不应销毁Root。是否只销毁tkMessageBox?恐怕这是不可能的,因为您无法获得对实际对话框窗口的引用,您必须创建自己的。谢谢@fhdrsdg。我将采用定制窗口方法。我很高兴能帮助您。如果您还没有,请阅读上的帮助页。谢谢@fhdrsdg。我将采用定制窗口方法。我很高兴能帮助您。如果尚未安装,请阅读上的帮助页。