我是python / tkinter新手,正在努力使“无模式窗口”出现在根画布的前面,同时完成一些工作,然后以编程方式将其关闭。
几天来一直在尝试了解如何执行此操作。在我使用的RAD工具中,它是1行代码,所以我绝对不在我的深度之内!
from tkinter import *
from functools import partial
import time
# creating tkinter window
root = Tk()
root.overrideredirect(True)
#Define variables
HomeDir = "/temp/" #Home Directory for images etc
# Creating a photoimage object to use on main canvas button
photo1 = PhotoImage(file = HomeDir + "B1.gif")
#Create and populate the canvas
w = Canvas(root, width=1024, height=680, highlightthickness=0)
BackgroundImage = PhotoImage(file = HomeDir + "BackGroundImage.gif")
BackgroundCreated = w.create_image((0,0), image=BackgroundImage, anchor=NW)
TopMsg = w.create_text((320, 20), text="TEST", font="MSGothic 30 bold", anchor=NW)
w.pack(side = "bottom", fill = "both", expand = "no")
#Define button actions
def ButtonAction(BN):
print("Button " + str(BN)) # For debug purposes
#At this point I want a modeless "Window" to pop up with an image and
#some text on it such as "Button X Clicked"
#and then after a few seconds I want the "Window" to close automatically
# Adding widgets to the root window
B1 = Button(root, image = photo1, command=partial(ButtonAction,1)).place(x=100,y=300)
mainloop()
从代码中,我试图使def ButtonAction(BN):执行以下操作:
在根画布前面弹出一个较小的“无模式窗口”,以便显示“请稍候...”之类的图像,并在整个窗口中填充图像。
做一些工作,因此尝试使用睡眠来模拟此操作以暂停操作。
关闭无模式窗口,然后再次返回到主画布。
由于我觉得自己完全错了,因此我不会发表任何努力来做到这一点。
答案 0 :(得分:1)
您需要做的就是创建Toplevel
的实例,然后将所需的所有小部件放入其中。 Toplevel
窗口默认为无模式。
要在一段时间后杀死它,可以使用after
。看起来像这样:
def ButtonAction(BN):
top = Toplevel(root)
label = Label(top, text="Button {} clicked".format(BN))
label.pack(padx=20, pady=20)
top.after(5000, top.destroy)