如何在 tkinter 上放置图像
How to place image on tkinter
我无法在我的图形界面页面之一上显示我的图像
from tkinter import *
from tkinter import ttk
LARGE_FONT= ("Verdana", 20)
class MyApp(Tk):
def __init__(self):
Tk.__init__(self)
container = ttk.Frame(self)
container.pack(side="top", fill="both", expand = True)
self.frames = {}
for F in (PageOne, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky = NSEW)
self.show_frame(PageOne)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def get_page(self, classname):
'''Returns an instance of a page given it's class name as a string'''
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
return None
我想将图像放在 PAGEONE 上,但我没有 canvas 的属性。这是否意味着我不能使用它?
我删除了 Pagetwo 以便我的代码更小并且不占用 space
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
ttk.Frame.__init__(self, parent)
ttk.Label(self, text='Home Page', font=LARGE_FONT).grid(padx=(400,400), pady=(50,50))
self.controller = controller
self.make_widget(controller)
# Image
canvas = ttk.Canvas(self, width = 1000, height = 1000)
canvas.grid()
image = self.Image(file="mypicture.png")
canvas.create_image(480, 258, image = image, anchor = ttk.NW)
def make_widget(self, controller):
self.v = StringVar()
self.v.set("a")
button1 = ttk.Button(self, text="Dispensing", command=self.validate)
button1.grid(padx=20, pady=30)
button2 = ttk.Button(self, text='Settings',
command=lambda: controller.show_frame(PageTwo))
button2.grid(padx=20, pady=20)
def validate(self):
value = self.v.get()
if value == "a":
print("Small Amount Dispensing")
app = MyApp()
app.title('Multi-Page Test App')
app.mainloop()
您在函数内创建图像,当函数结束时,对图像的引用将被垃圾回收。您必须保存对图像的引用。检查下面的代码:
# Image
canvas = Canvas(self, width = 1000, height = 1000)
canvas.grid()
image = PhotoImage(file="mypicture.png")
canvas.create_image(480, 258, image=image, anchor=NW)
canvas.image = image # Save a reference to the image
据我所知,没有 ttk.Canvas
小部件;使用 tkinter 小部件。与 ttk.NW
.
相同
创建图片的函数是PhotoImage
。
我无法在我的图形界面页面之一上显示我的图像
from tkinter import *
from tkinter import ttk
LARGE_FONT= ("Verdana", 20)
class MyApp(Tk):
def __init__(self):
Tk.__init__(self)
container = ttk.Frame(self)
container.pack(side="top", fill="both", expand = True)
self.frames = {}
for F in (PageOne, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky = NSEW)
self.show_frame(PageOne)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def get_page(self, classname):
'''Returns an instance of a page given it's class name as a string'''
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
return None
我想将图像放在 PAGEONE 上,但我没有 canvas 的属性。这是否意味着我不能使用它? 我删除了 Pagetwo 以便我的代码更小并且不占用 space
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
ttk.Frame.__init__(self, parent)
ttk.Label(self, text='Home Page', font=LARGE_FONT).grid(padx=(400,400), pady=(50,50))
self.controller = controller
self.make_widget(controller)
# Image
canvas = ttk.Canvas(self, width = 1000, height = 1000)
canvas.grid()
image = self.Image(file="mypicture.png")
canvas.create_image(480, 258, image = image, anchor = ttk.NW)
def make_widget(self, controller):
self.v = StringVar()
self.v.set("a")
button1 = ttk.Button(self, text="Dispensing", command=self.validate)
button1.grid(padx=20, pady=30)
button2 = ttk.Button(self, text='Settings',
command=lambda: controller.show_frame(PageTwo))
button2.grid(padx=20, pady=20)
def validate(self):
value = self.v.get()
if value == "a":
print("Small Amount Dispensing")
app = MyApp()
app.title('Multi-Page Test App')
app.mainloop()
您在函数内创建图像,当函数结束时,对图像的引用将被垃圾回收。您必须保存对图像的引用。检查下面的代码:
# Image
canvas = Canvas(self, width = 1000, height = 1000)
canvas.grid()
image = PhotoImage(file="mypicture.png")
canvas.create_image(480, 258, image=image, anchor=NW)
canvas.image = image # Save a reference to the image
据我所知,没有 ttk.Canvas
小部件;使用 tkinter 小部件。与 ttk.NW
.
创建图片的函数是PhotoImage
。