Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter打开多个图像并将其保存到多个画布_Python_Image_Python 3.x_Canvas_Tkinter - Fatal编程技术网

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

Python Tkinter打开多个图像并将其保存到多个画布,python,image,python-3.x,canvas,tkinter,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

我正在努力学习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()

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

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()