Есть много предложений, которые сделают ваш код более приятным / элегантным.
Во-первых, не используйте окно Tk()
для всплывающего окна.окно, используйте окно TopLevel()
, два окна Tk()
не могут передавать информацию друг другу, поэтому вместо этого используйте окно TopLevel()
.
def popupmsg(msg):
global MSGroot
MSGroot = TopLevel(root) # needs the main Tk() window as a master/parent element
lab1.config("test")
lab1= Label(MSGroot, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
MSGroot.title("TIME")
MSGroot.call('wm', 'attributes', '.', '-topmost', '1')
Во-вторых, вы должны создатьклассы для создания окон Tk
и TopLevel
, это просто лучше форматирует ваш код и более функционально для внесения изменений в работу окон.
class PopUpMsg(Toplevel):
def __init__(self, master, msg):
super(PopUpMsg, self).__init__(master)
lab1 = Label(self, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
self.title("TIME")
self.call('wm', 'attributes', '.', '-topmost', '1')
# This is now the function you could use to show the popup
def popupmsg(msg):
test_popup = PopUpMsg(root, msg) # This is how you would create the PopUpMsg
test_popup.pack()
root = Tk()
root.mainloop()
Наконец, чтобы сделатьтак что тогда, когда вы снова нажмете «s», окно закроется, я создам on_close
метод для этого нового PopUpMsg
класса и свяжу с ним «s».
class PopUpMsg(Toplevel):
def __init__(self, master):
super(PopUpMsg, self).__init__(master)
lab1 = Label(self, font=('times', 40), bg='blue', fg="red")
lab1.grid(row=0, column=1)
self.title("TIME")
self.bind('<s>', self.on_close)
def on_close(self):
self.destroy()