2017-08-20 25 views
0
from tkinter import * 
from PIL import ImageTk, Image 
import os 

root = Tk() 
img = ImageTk.PhotoImage(Image.open("example_image.png")) 
panel = Label(root, image = img) 
panel.pack(side = "bottom", fill = "both", expand = "yes") 
root.mainloop() 

root.minsize(width=250, height=275) 
root.maxsize(width=375, height=525) 

私はそれを動作させるために複数のことを試みましたが、何を試しても、画像は同じサイズのままです。簡単にすると、画像が400x800で、画像を125x250に拡大したいと思っていますが、私は上記のスニペットを修正して(またはやり直して)これを野心的な目標にするのではないでしょうか? 250x350/375x525の最小/最大サイズのウィンドウがあるとします。画像は同じサイズのままですが切り取られ、画像全体が見えません。画像のうちウィンドウサイズの部分だけが見えます。他のソフトウェアで実際の画像を直接変更することなく、画像のサイズを変更する方法はありますか?事前に感謝し、私はあなたが入力したものとあなたを混乱させるかどうか尋ねます。tkinter画像サイジングPIL

+0

を?このImage.open( "example_image.png")をpimgのような変数に代入します。そのようなピムを次のようにサイズ変更してください:new_pimg = pimg.resize((w、h)) – ROAR

+0

それだけです、私はすでにそれを試み、それは動作しませんでした。 –

+0

リサイズの有無にかかわらず、結果のスクリーンショットを表示できますか? – ROAR

答えて

1

ここにあなたのコードだが改善:あなただけPILでそれをリサイズしない理由

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


def change_image_size(event): 
    # This function resizes original_img every time panel size changes size. 
    global original_img 
    global img 
    global first_run 
    global wid_dif 
    global hei_dif 
    if first_run: 
     # Should get size differences of img and panel because panel is always going to a little bigger. 
     # You then resize origianl_img to size of panel minus differences. 
     wid_dif = event.width - img.width() 
     hei_dif = event.height - img.height() 
     # Should define minsize, maxsize here if you aren't 
     # going to define root.geometry yourself and you want 
     # root to fit to the size of panel. 
     root.minsize(width=250, height=275) 
     root.maxsize(width=375, height=525) 
     first_run = False 
    pimg = original_img.resize((event.width-wid_dif,event.height-hei_dif)) 
    img = ImageTk.PhotoImage(pimg) 
    panel.configure(image=img) 



first_run = True # first time change_image_size runs 
wid_dif = 0 # width difference of panel and first unchanged img 
hei_dif = 0 # height difference of panel and first unchanged img 

root = Tk() 

original_img = Image.open("example_image.png") 
img = ImageTk.PhotoImage(original_img) 
panel = Label(root, image = img) 
panel.pack(side = "bottom", fill = "both", expand = "yes") 
# This "<Configure>" runs whenever panel changes size or place 
panel.bind("<Configure>",change_image_size) 
root.mainloop() 
関連する問題