2017-10-22 2 views
-1

Tkinter와 python을 배우려고합니다. 어떻게 여러 개의 이미지를 열고 파이썬 3의 여러 캔버스에 저장할 수 있습니까? 나는 캔버스의 크기에 완벽하게 맞는 이미지를 원한다.Tkinter 여러 이미지를 열고 여러 캔버스에 저장

누군가 간단한 코드를 사용하여이 작업을 수행 할 수 있습니까?

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

답변

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() 
관련 문제