Tkinter按钮生成新窗口问题:如何将按钮添加至带背景的同一窗口
问题解答:如何将按钮添加到已有背景的Tkinter窗口中
你的问题出在一个很容易犯的Tkinter新手错误上:你创建了两个独立的窗口实例——top = Tk()和root = Tk()。在Tkinter里,每调用一次Tk()都会生成一个全新的顶级窗口,所以你的按钮自然会跑到第二个窗口里去。
要把按钮放到你设置了背景的那个窗口里,只需要让所有组件都归属同一个窗口实例(也就是你最初创建的top)就行。下面是修改后的完整代码:
from tkinter import * from tkinter.filedialog import askopenfilename from tkinter import messagebox from PIL import ImageTk # 只创建一个主窗口实例,所有组件都基于它 top = Tk() # 初始化画布和背景标签 C = Canvas(top, bg ="blue", height=1920, width=1080) filename = ImageTk.PhotoImage(file = "C:/Users/plapl/Desktop/ching.jpg") background_label = Label(top, image=filename) background_label.place(x=0, y=0, relwidth=1, relheight=1) C.pack() # 按钮的父组件指定为top,而不是新建的root myButton = Button(top, text = "Add a task") # 这里用pack布局,也可以用place手动定位,比如myButton.place(x=50, y=50) myButton.pack(pady=20) # 只启动主窗口的事件循环 top.mainloop()
核心修改要点:
- 移除多余的
root = Tk()和root.mainloop(),只保留一个顶级窗口实例top - 将按钮的父组件从
root改为top,确保按钮被添加到目标窗口 - 如果你发现按钮被背景图片遮挡,可以试试这些办法:
- 调整组件创建/布局的顺序(后创建的组件默认在更上层)
- 调用
myButton.lift()将按钮提升到所有组件的最上层 - 使用
place()方法手动设置按钮的位置,避免被覆盖
内容的提问来源于stack exchange,提问作者Axsor
相关产品推荐
相关产品推荐

