2013-08-22 7 views
7

पर Tkinter में जनहित याचिका छवि को खोलने के लिए मैं कैनवास पर काम करने के लिए मेरी जनहित याचिका छवि प्राप्त नहीं कर पा रहे। कोड:कैसे कैनवास

from Tkinter import* 
import Image, ImageTk 
root = Tk() 
root.geometry('1000x1000') 
canvas = Canvas(root,width=999,height=999) 
canvas.pack() 
image = ImageTk.PhotoImage("ball.gif") 
imagesprite = canvas.create_image(400,400,image=image) 
root.mainloop() 

त्रुटि:

Traceback (most recent call last): 
    File "C:/Users/Mark Malkin/Desktop/3d Graphics Testing/afdds.py", line 7, in <module> 
    image = ImageTk.PhotoImage("ball.gif") 
    File "C:\Python27\lib\site-packages\PIL\ImageTk.py", line 109, in __init__ 
    mode = Image.getmodebase(mode) 
    File "C:\Python27\lib\site-packages\PIL\Image.py", line 245, in getmodebase 
    return ImageMode.getmode(mode).basemode 
    File "C:\Python27\lib\site-packages\PIL\ImageMode.py", line 50, in getmode 
    return _modes[mode] 
KeyError: 'ball.gif' 

मैं जनहित याचिका नहीं छवियों PhotoImages उपयोग करने के लिए क्योंकि मैं अपने छवियों का आकार करना चाहते हैं की जरूरत है। कृपया Pygame पर स्विच करने का सुझाव न दें क्योंकि मैं टिंकर का उपयोग करना चाहता हूं।

+1

मैं उलझन में हूं - आप कहते हैं कि आप 'फोटोइमेज' का उपयोग नहीं करना चाहते हैं, लेकिन आपका कोड 'फोटोइमेज' का उपयोग करता है। क्या आपका मतलब है कि आप 'Tkinter.PhotoImage' की बजाय' ImageTk.PhotoImage' का उपयोग करना चाहते हैं? – Brionius

+1

क्या आपने 'PhotoImage' के लिए दस्तावेज़ पढ़ने का प्रयास किया है? यह एक छवि वस्तु, या एक मोड और एक आकार लेता है। आप इसे पास नहीं कर रहे हैं; आप इसे एक फ़ाइल नाम पास कर रहे हैं। ('KeyError'' वापसी _modes पर [मोड] 'यह बहुत स्पष्ट है कि यह एक साधन के रूप में फ़ाइल नाम के इलाज के लिए कोशिश कर रहा है बनाता है ... लेकिन यह कोई फर्क नहीं होता जो भी इसे करने की कोशिश की है, यह किसी भी तरह से विफल हो जाएगा।) – abarnert

उत्तर

8

पहले पीआईएल छवि बनाने का प्रयास करें, फिर फोटोइमेज बनाने के लिए इसका उपयोग करें।

from Tkinter import * 
import Image, ImageTk 
root = Tk() 
root.geometry('1000x1000') 
canvas = Canvas(root,width=999,height=999) 
canvas.pack() 
pilImage = Image.open("ball.gif") 
image = ImageTk.PhotoImage(pilImage) 
imagesprite = canvas.create_image(400,400,image=image) 
root.mainloop() 
+0

ImageTk.PhotoImage मैं वही उपयोग करना चाहता था, क्योंकि मैं आकार बदलने में सक्षम होना चाहता हूं। – user164814

+0

आयात त्रुटि बढ़ाएं ("_imaging सी मॉड्यूल स्थापित नहीं है") आयात त्रुटि: _imaging सी मॉड्यूल स्थापित नहीं है – user164814

+0

@ user164814 आह, आप एक मजेदार समय के लिए हैं। आप एक पीआईएल बाइनरी खो रहे हैं - यह आपके पीआईएल इंस्टॉल के साथ एक समस्या है, कोड नहीं। [यह आलेख] देखें (http://effbot.org/zone/pil-imaging-not-installed.htm)। यदि आपने पीआईएल स्थापित करने के लिए मैकपॉर्ट्स का उपयोग किया है, तो सिस्टम को स्वयं स्थापित करने का प्रयास करें। सौभाग्य। – Brionius

2

आप एकाधिक छवि प्रारूप आयात कर सकते हैं और इस कोड के साथ आकार बदल सकते हैं। "बेसविड्थ" आपकी छवि की चौड़ाई निर्धारित करता है।

from Tkinter import * 
import PIL 
from PIL import ImageTk, Image 

root=Tk() 
image = Image.open("/path/to/your/image.jpg") 
canvas=Canvas(root, height=200, width=200) 
basewidth = 150 
wpercent = (basewidth/float(image.size[0])) 
hsize = int((float(image.size[1]) * float(wpercent))) 
image = image.resize((basewidth, hsize), PIL.Image.ANTIALIAS) 
photo = ImageTk.PhotoImage(image) 
item4 = canvas.create_image(100, 80, image=photo) 

canvas.pack(side = TOP, expand=True, fill=BOTH) 
root.mainloop() 
0

(। एक पुरानी सवाल है, लेकिन जवाब अभी तक केवल अर्ध-पूर्ण हैं)

डॉक्स पढ़ें:

class PIL.ImageTk.PhotoImage(image=None, size=None, **kw) 
  • image - या तो एक जनहित याचिका छवि, या एक मोड स्ट्रिंग [...]
  • file - छवि को लोड करने के लिए एक फ़ाइल नाम (Image.open(file) का उपयोग करके)।

तो अपने उदाहरण में,

image = ImageTk.PhotoImage(file="ball.gif") 

या स्पष्ट रूप से

image = ImageTk.PhotoImage(Image("ball.gif")) 

का उपयोग करें (और याद रखें - आप सही तरीके से किया था: अपने अजगर कार्यक्रम में छवि वस्तु के लिए एक संदर्भ रखें, अन्यथा यह देखने से पहले कचरा इकट्ठा किया जाता है।)