Как открыть файл диалога после нажатия кнопки? - PullRequest
0 голосов
/ 24 декабря 2018

Я хотел бы открыть диалог после нажатия кнопки.Тогда я мог выбрать изображение и отобразить его на холсте.(Моя цель - создать очень простой редактор изображений) К сожалению, диалог с файлами открывается автоматически при запуске программы.Есть ли способ, например, сделать что-то вроде этого:

  • нажмите кнопку, чтобы открыть файл журнала

  • выбрать изображение

  • показать изображение на холсте

Вот мой код, который я сделал до сих пор

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

root = Tk()   
#function to select my image by using the filedialog
def select_image(): 
    file_path = filedialog.askopenfilename()
    return Image.open(file_path)

#button to press to open filedialog
select = Button(root, text="select an image", command=select_image)
select.pack()

#the canvas where the image will be display
canvas = Canvas(root, width= 400, height=400, bg="grey")
canvas.pack()

image_tk = ImageTk.PhotoImage(select_image())
canvas.create_image(200,200, image= image_tk)   
root.mainloop()

1 Ответ

0 голосов
/ 24 декабря 2018

FileDialog открывается из-за этой строки:

image_tk = ImageTk.PhotoImage (select_image ())

Мое решение:

from tkinter import Tk, filedialog, Frame, Button, Canvas
from PIL import Image, ImageTk

class Gui:
    def __init__(self, master):
        self.master = master
        self.create_widgets()

    def create_widgets(self):
        self.select = Button(self.master, text="select an image", command=self.select_image)
        self.select.pack()
        self.canvas = Canvas(self.master, width= 400, height=400, bg="grey")
        self.canvas.pack()

    def select_image(self): 
        file_path = filedialog.askopenfilename()
        des = Image.open(file_path)
        bg_image = ImageTk.PhotoImage(des)
        self.canvas.bg_image = bg_image
        self.canvas.create_image(200,200, image=self.canvas.bg_image)

if __name__ == "__main__":  
    root = Tk()
    my_gui = Gui(root)
    root.mainloop()
...