我正在构建控制应用程序,阻止用户使用计算机,直到操作员解锁为止。
在锁定期间,操作员可以向用户的计算机发送消息,并通过弹出消息向用户显示这些消息。
问题案例:
如果操作员发送两条或更多条消息,则只显示第一条消息,因为我正在使用tkMessageBox.showinfo()
并阻止该消息直到用户点击确定按钮。
现在您可能会问我为什么不构建自己的消息框类并使其多次显示而不会阻塞?
实际上我不能这样做,因为应用程序有focus forcing
。
这是应用程序构造函数和focus forcing
方法:
def __init__(self):
self.root_window = Tkinter.Tk()
self.main_frame = Tkinter.Frame(self.root_window)
self.root_window.update_idletasks()
height = self.root_window.winfo_screenheight()
width = self.root_window.winfo_screenwidth()
x = self.root_window.winfo_screenwidth() / 2 - width / 2
y = self.root_window.winfo_screenheight() / 2 - height / 2
self.root_window.geometry('{}x{}+{}+{}'.format(width, height, x, y))
# focus forcing
self.root_window.bind("<FocusOut>", self.app_lost_focus)
def app_lost_focus(self, event):
self.root_window.focus_set()
self.root_window.after(1, lambda: self.root_window.focus_force())
现在,如果您知道弹出消息的任何其他替代方法没有阻止并且可以多次出现[并且虽然看到了focus forcing
],我将很高兴听到它。