簡體   English   中英

如何使用上傳按鈕顯示圖像並使用 window 調整大小(動態)使用 Tkinter python 調整大小,我需要添加上傳按鈕

[英]How to display image with upload button in and resize it with window resize (Dynamically)with Tkinter python, I need to add upload button

我需要添加上傳按鈕,以便我可以使用此 class 上傳圖片並顯示。 一切正常,但是當我添加上傳按鈕時,它給了我一些錯誤,並且我的代碼無法正常工作。

import tkinter as tk
from tkinter import *
from PIL import Image, ImageTk
from tkinter import filedialog

class Layout:
    
    def __init__(self,master):
        self.master = master
        self.rootgeometry()
        self.canvas = tk.Canvas(self.master)
        self.canvas.pack()
        self.background_image = Image.open(self.openfn())
        self.image_copy = self.background_image.copy()
        self.background = ImageTk.PhotoImage(self.background_image)
        self.loadbackground()
             
                   

    def loadbackground(self):
        self.label = tk.Label(self.canvas, image = self.background)
        self.label.bind('<Configure>',self.resizeimage)
        self.label.pack(fill='both', expand='yes')
    
    def openfn(self):
        filename = filedialog.askopenfilename(title='open')
        return filename
    


    def rootgeometry(self):
        x=int(self.master.winfo_screenwidth()*0.7)
        y=int(self.master.winfo_screenheight()*0.7)
        z = str(x) +'x'+str(y)
        self.master.geometry(z)

    def resizeimage(self,event):
        image = self.image_copy.resize((self.master.winfo_width(),self.master.winfo_height()))
        self.image1 = ImageTk.PhotoImage(image)
        self.label.config(image = self.image1)

root = tk.Tk()
a = Layout(root)
root.mainloop()

在 class 構造函數中創建Button小部件並將其與self.loadbackground綁定。 此外,您不需要每次都重新創建Label小部件,而是使用label.configure(image=yourimage)

這是代碼:

import tkinter as tk
from tkinter import *
from PIL import Image, ImageTk
from tkinter import filedialog

class Layout:
    
    def __init__(self,master):
        self.master = master
        self.rootgeometry()

        self.button = Button(self.master, text='Upload', command=self.loadbackground)
        self.button.pack()
        
        self.canvas = tk.Canvas(self.master)
        self.canvas.pack(fill=BOTH, expand=True)

        self.background_image = None
        self.image_copy = None
        self.background = None

        self.label = tk.Label(self.canvas)
        self.label.pack(fill='both', expand=True)
        

    def loadbackground(self):

        self.background_image = Image.open(self.openfn())
        self.image_copy = self.background_image.copy()
        
        self.background = ImageTk.PhotoImage(self.background_image.resize((self.canvas.winfo_width(), self.canvas.winfo_height())))
        self.label.configure(image=self.background)
        self.label.bind('<Configure>',self.resizeimage)

    def openfn(self):
        filename = filedialog.askopenfilename(title='open')
        return filename
    

    def rootgeometry(self):
        x=int(self.master.winfo_screenwidth()*0.7)
        y=int(self.master.winfo_screenheight()*0.7)
        z = str(x) +'x'+str(y)
        self.master.geometry(z)

    def resizeimage(self,event):
        image = self.image_copy.resize((event.width, event.height))
        self.image1 = ImageTk.PhotoImage(image)
        self.label.config(image = self.image1)
        

root = tk.Tk()
a = Layout(root)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM