背景在具有 counter-tkinter 的单独窗口中透明
Posted
技术标签:
【中文标题】背景在具有 counter-tkinter 的单独窗口中透明【英文标题】:background transparent in separate window which has counter-tkinter 【发布时间】:2020-11-07 12:25:27 【问题描述】:我想在我的框架上进行倒计时,但为了创建计数器,我必须使用文本或标签或其他有背景的小部件,但我只需要在框架上显示数字,所以我想创建当前框架上的另一个窗口,我尝试使用 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)
【问题讨论】:
为什么不用self.canvas.create_text(...)
在主窗口显示倒计时?
【参考方案1】:
一旦知道如何/何时调用倒计时,就可以实现更好的解决方案。但这是一个基于您的代码的版本:
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()
【讨论】:
感谢您的回答,但在您的代码中,您正在创建两个窗口,但倒计时显示在第一个窗口中,而我希望它在第二个窗口上,并且第二个窗口需要完全透明为它应该只显示数字。 我刚刚编辑了我的答案。试试这个版本。但从一开始,倒计时就显示在第二个窗口中。我为两个窗口添加了标题。因此,您现在更容易识别。在您的代码中,一旦定义了标签,您就忘记将 self.canvas 分配给它。我现在更正了。如果需要,您也可以将标签的位置设置为 x=0 和 y=0。 另外一个建议: 倒计时从两位数变为一位数(10 到 9)时,您可以通过将数字设置为两位数来摆脱黑色背景像(09 08 ..等)。您需要做的是将 label.configure 中的 %d 替换为 %02d。祝你好运以上是关于背景在具有 counter-tkinter 的单独窗口中透明的主要内容,如果未能解决你的问题,请参考以下文章