Tkinter打开多个图像并将其保存到多个画布

时间:2017-10-22 11:22:25

标签: python image python-3.x canvas tkinter

我正在尝试学习Tkinter和python。如何在Python 3中打开多个图像并将其保存在多个画布上?我还希望图像能够完美地适应画布的大小。

有人可以让我用简单的代码来做这件事。

import tkinter
from tkinter import filedialog
import os
#from PIL import ImageTk, Image
from tkinter import *
import PIL.Image
from tkinter.filedialog import askopenfilename
import py_compile

mainWindow =tkinter.Tk()

mainWindow.title("Image")
mainWindow.geometry('640x480+800+200')

mainWindow.columnconfigure(0, weight=3)
mainWindow.columnconfigure(1, weight=1)
mainWindow.columnconfigure(2, weight=1)
mainWindow.rowconfigure(0, weight=3)
mainWindow.rowconfigure(1, weight=3)
mainWindow.rowconfigure(2, weight=5)
mainWindow.rowconfigure(3, weight=3)

leftFrame = tkinter.LabelFrame(mainWindow, text='PICTURE')
leftFrame.grid()

canvas = tkinter.Canvas(leftFrame, relief='sunken', borderwidth=5, bg= 'white', width=100, height=100)
canvas.grid(row=1, column=0)
canvas2 = tkinter.Canvas(leftFrame, relief='sunken', borderwidth=5, bg= 'white', width=100, height=100)
canvas2.grid(row=2, column=0)
canvas3 = tkinter.Canvas(leftFrame, relief='sunken', borderwidth=5, bg= 'white', width=100, height=100)
canvas3.grid(row=1, column=1)
canvas4 = tkinter.Canvas(leftFrame, relief='sunken', borderwidth=5, bg= 'white', width=100, height=100)
canvas4.grid(row=2, column=1)

def clicked():
    print('hello')
    open_img()

def open_img():
    global photo
    filename = filedialog.askopenfilename(initialdir = "E:/Images", filetypes = ())
    photo = tkinter.PhotoImage(file=filename)
    photo = photo.subsample(3,3)
    canvas.create_image(0,0, anchor=CENTER, image=photo)

rightFrame = tkinter.LabelFrame(mainWindow, text='MENU')
rightFrame.grid()

button1 = tkinter.Button(rightFrame , text="Open", command=clicked)
button1.grid(row=1, column=2)

mainWindow.mainloop()

1 个答案:

答案 0 :(得分:0)

您将使用一个类创建该类的实例,但由于您没有使用类,因此可能不熟悉类结构,因此以下代码将所有内容组合到一个类中。由于我没有图像,因此每次单击“打开”按钮时,都会打开一个带有相关“关闭”按钮而不是图像的新Toplevel。

try:
    import Tkinter as tk     ## Python 2.x
except ImportError:
    import tkinter as tk     ## Python 3.x

from functools import partial

class OpenToplevels():
    """ open and close additional Toplevels with a button
    """
    def __init__(self):
        self.root = tk.Tk()
        self.button_ctr=0
        but=tk.Button(self.root, text="Open a Toplevel",
                      command=self.open_another)
        but.grid(row=0, column=0)
        tk.Button(self.root, text="Exit Tkinter", bg="red",
                  command=self.root.quit).grid(row=1, column=0, sticky="we")
        self.root.mainloop()

    def close_it(self, id):
        id.destroy()

    def open_another(self):
        self.button_ctr += 1
        id = tk.Toplevel(self.root)
        id.title("Toplevel #%d" % (self.button_ctr))
        tk.Button(id, text="Close Toplevel #%d" % (self.button_ctr),
                  command=partial(self.close_it, id),
                  bg="orange", width=20).grid(row=1, column=0)

Ot=OpenToplevels()