-1

我想在我的框架上倒计时,但为了创建计数器,我必须使用文本或标签或其他有背景的小部件,但我只需要在框架上显示数字,所以我想创建另一个窗口在当前帧上,我尝试使用 Toplevel() 和 grab_set 并在几秒钟后销毁帧。但是我在调​​用 countdown() 和编写定义时遇到了困难。我只想让倒计时数字显示在我的框架上,并且这些数字应该具有透明背景。我被困在调用 countdown() 并根据新框架顶部定义倒计时。在我的代码中,我试图在画布上显示数字

class ExampleApp(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.canvas = Canvas(self, width=2085, height=1080, bg='#020A2E')
        self.canvas.pack()
        top = Toplevel(self)
        top.grab_set()
        top.label = Label(self, text="", font='Arial 90 bold', fg='red',bg='black')
        top.label.place(x=100,y=100)
        top.wm_attributes("-transparentcolor", "black")
        top.remaining = 1
        self.countdown(3)
        top.grab_release()

    def countdown(self, remaining = None):
        if remaining is not None:
            self.remaining = remaining

        if self.remaining <= 0:
            self.label.configure(text="")
            self.label.destroy()
        else:
            self.top.label.configure(text="%d" % self.remaining)
            self.remaining = self.remaining - 1
            self.after(1000, self.countdown)
4

1 回答 1

0

一旦知道如何/何时调用倒计时,就可以实现更好的解决方案。但这是一个基于您的代码的版本:

class TopWin(Toplevel):
    def __init__(self):
        Toplevel.__init__(self)
        self.title('Window 2')
        self.geometry()
        self.canvas = Canvas(self, width=150, height=150, bg='#020A2E')
        self.canvas.pack()
        self.grab_set()
        self.label = Label(self.canvas, font='Arial 90 bold', fg='red',bg='black')
        self.label.place(x=5,y=5)
        self.wm_attributes("-transparentcolor", "black")
        self.remaining = 1
        self.countdown(3)
        self.grab_release()
        
    def countdown(self, remaining = None):
        if remaining is not None:
            self.remaining = remaining

        if self.remaining <= 0:
            self.label.configure(text="")
            self.destroy()
        else:
            self.label.configure(text="%d" % self.remaining)
            self.remaining = self.remaining - 1
            self.after(1000, self.countdown)
           
class App(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.master = master
        self.master.title('Window 1')
        self.master.geometry('500x500')
        self.label = Label(self.master)
        self.label.pack()
        self.topWin = TopWin()
        
      
root = Tk()
app = App(root)
app.topWin.countdown(15)
root.mainloop()
于 2020-07-17T17:22:21.513 回答