【问题标题】:How to add image to a new window opened by a button in Tkinter?如何将图像添加到由 Tkinter 中的按钮打开的新窗口?
【发布时间】:2025-12-31 12:00:12
【问题描述】:

显示主窗口图像,但按下 P 按钮时打开的新窗口不显示图像。

不知道为什么新窗口没有添加图片,因为我遵循了与主窗口相同的过程。

注意:两个图像都在同一个目录中。感谢您的帮助!

from tkinter import *

def openWindow():
    newWindow = Toplevel(root)
    newWindow.geometry("1050x580")
    newWindow.title("P&ID")
    #newWindow.configure(background= 'grey')
    
    bg1 = PhotoImage(file = "p.png") 
    my_canvas2 = Canvas(root, width=1050, height=580, border= 0, highlightthickness=0)
    my_canvas2.pack(fill = "both", expand=True)
    
    #Set image in Cnavas
    my_canvas2.create_image(0,0, image = bg1, anchor = "nw")
    
    Label(root, text = "P")
    


root = Tk() 
root.geometry("1050x580") 
root.title(" Hellow ") 

bg = PhotoImage(file = "pht.png")

my_canvas = Canvas(root, width=1050, height=580, border= 0, highlightthickness=0)
my_canvas.pack(fill = "both", expand=True)

#Set image in Cnavas
my_canvas.create_image(0,0, image = bg, anchor = "nw")

#Add label
my_canvas.create_text(100,50, text= "T", font = ("Helvetica", 25), fill ="white")
#Add button 
button1 = Button(root, text="Saved values")
button1_window = my_canvas.create_window(780,100, anchor="sw", window = button1)
button2 = Button(root, text="Help")
button2_window = my_canvas.create_window(925, 100, anchor = "sw", window = button2)
button3 = Button(root, text="P", command= openWindow)
button3_window = my_canvas.create_window(710, 100, anchor = "sw", window = button3)

#define entry box
entry = Entry(root, font=("Helvetica", 16), width=14,fg ="dark blue", border=0)

#define the output 
output = Text(root, font=("Helvetica", 16), width=50, height= 10, fg ="dark blue", border=0)
sensor_values = Text(root, font=("Helvetica", 18), width=75, height= 1, fg ="dark blue", border=0)

#Add label for cmd box
my_canvas.create_text(150,100, text= "Enter a command:", font = ("Helvetica", 15), fill ="white")
#Add entry boxes to the canvas
cmd_window = my_canvas.create_window(70,130, anchor= "nw", window= entry)

#Add label for the output window
my_canvas.create_text(400,100, text= "Output:", font = ("Helvetica", 15), fill ="white")
out_window = my_canvas.create_window(660, 250,window = output )

mainloop() 

【问题讨论】:

  • 尝试使用my_canvas2.tk_img = bg1。它应该可以解决您的问题(假设它类似于this)。

标签: python-3.x tkinter


【解决方案1】:

使用:my_canvas2.tk_img = bg1 应该写在新窗口的代码里

【讨论】:

    【解决方案2】:

    我假设您希望将 my_canvas2 放置在顶层窗口中,因此您的函数应该是:

    def openWindow():
      newWindow = Toplevel(root)
      newWindow.geometry("1050x580")
      newWindow.title("P&ID")
      #newWindow.configure(background= 'grey')
    
      bg1 = PhotoImage(file = "p.png") 
      my_canvas2 = Canvas(newWindow,width=1050, height=580, border= 0, highlightthickness=0)
      my_canvas2.pack(fill = "both", expand=True)
    
      #Set image in Cnavas
      my_canvas2.create_image(0,0, image = bg1, anchor = "new")
    
      Label(root, text = "P")
      mainloop()
    

    【讨论】:

      最近更新 更多