2 | ||
Editor: geon
Time: 2011/10/15 11:30:32 GMT+2 |
||
Note: pridavani znacek 2x-3x |
changed: - <img src="py25.png" align=right> Výtah z konference > Ahoj .... mam pygame a porad nechapu nahrani obrazku ze souboru. Poradi mi nekdo jak ho jednoduse nahrat? PyGame Takže to co hledáš, je:: hrdina = pygame.image.load('hrdina.jpg') Jen připomínám, ať si dáš pozor na cesty, obrázek by měl ležet ve stejném adresáři nebo musí být s plnou cestou. Obrázek můžeš použít jakýkoliv, nebo si ho stáhnout ze stránky tutoriálu pygame "Posun to":http://geon.wz.cz/pygame/tut/moveit/moveit.html (hlava šelmy):: # -*- coding: cp1250 -*- # import a inicializace import pygame, sys from pygame.locals import * pygame.init() # nastavení konstant REZIM=(640, 480) umisteniObrazku=(0,0) obrazovka = pygame.display.set_mode(REZIM) hrdina = pygame.image.load('hrdina.jpg') #načtení obrázku obrazovka.blit(hrdina, umisteniObrazku) # vykreselení na obrazovkku pokracovat=1 while pokracovat: # téměř do nekonečna for udalost in pygame.event.get(): # o tomto více v tutoriálu if udalost.type ==QUIT: # ošetření Alt+F4 pokracovat=0 pygame.display.update() # aktualizace obrazovky pygame.time.delay(100) # cekej pygame.quit() print "Ted jsi zavrel okno. A to je vse :-)" Není to moc jednoduché, co? V jiných GUI jde pouhé načtení obrázku daleko jednodušeji. PyGame ale je herní modul, takže následně je zase lehčí ovládat pohyb obrázku a případné střílení (kolize s jinými obrázky),.... [Tkinter] Pro názornost přikádám jak by to bylo v Tkinteru:: import Tkinter root=Tkinter.Tk() platno=Tkinter.Canvas() platno.pack() obrazek = Tkinter.PhotoImage(file="hrdina.gif") polozka = platno.create_image(100, 100, image=obrazek) root.mainloop() Vsimni si, ze jsem predelal jpg na gif, protoze Tkinter bohuzel sám o sobě nepodporuje jpg. Vestavěnou podporu ma pro gif a pgm. Pokud chceš používat i jiné formáty, potřebuješ modul PIL (Image) (nutno stáhnout), což je mimochodem skvělá knihovna na práci s obrázky (převod mezi formáty a úprava obrázku - třebas u všech obrázků ve složce změníš rozměry nebo hloubku ...). Použití s Tkinterem pak vypadá takto:: import Tkinter, Image, ImageTk root=Tkinter.Tk() platno=Tkinter.Canvas() platno.pack() obrazekRaw = Image.open("hrdina.jpg") obrazek = ImageTk.PhotoImage(obrazekRaw) polozka = platno.create_image(100, 100, image=obrazek) root.mainloop() Python Imaging Library (PIL) http://www.pythonware.com/products/pil/ , tak lze obrázek otevřít do programu, který je v os pro příslušný typ nastaven:: import Image img = Image.open("test.jpg") img.show() [PyGTK] A takto by to bylo v PyGTK:: import pygtk pygtk.require('2.0') import gtk window = gtk.Window() window.set_title("Obrazek") window.connect("delete-event", gtk.main_quit) image=gtk.Image() image.set_from_file("hrdina.jpg") window.add(image) window.show_all() gtk.main() !PyQt :: # -*- coding: utf-8 -*- """ Jednoduchy priklad nahrani obrazku v GUI toolkitu PyQt. Funguje jak s http://pythonqt.vanrietpaap.nl/ (Windows) tak s http://www.riverbankcomputing.co.uk (Linux) Qt v soucasnosti podporuje nasledujici formaty: PNG, BMP, XBM, XPM a PNM. JPEG, MNG a GIF pomoci podpurnych knihoven pri kompilaci. Vice viz dokumentace Qt Komentare a vyhruzky: petr@yarpen.cz. Ano, je pravdepodobne, ze vas odchyti SpamAssassin. Je to milacek. """ from qt import * # sys je zde potreba pouze k syntatiktickemu predani parametru QApplication import sys class Form(QMainWindow): """ Ukazka nacteni obrazku do widgetu na hlavnim okne. Konstruktor tridy nastavuje umisteni widgetu v okne. Samotne nacteni obrazku provede posledni prikaz. Tohle je pouze ukazka, proto zde neni uvedeno zjistovani rozmeru obrazku, kontrola nacteni apod. Zde opet odkazuji na skvelou dokumentaci Qt (QPixmap.width(), height() apod).""" def __init__(self,parent = None,name = None,fl = 0): QMainWindow.__init__(self,parent,name,fl) formLayout = QGridLayout(self.centralWidget(),1,1,11,6,"formLayout") self.pixmapLabel = QLabel(self, "pixmapLabel"); # velikost okna a widgetu self.pixmapLabel.setMinimumSize(800, 600) self.setMinimumSize(800, 600) formLayout.addWidget(self.pixmapLabel, 0, 0) # vlastni nahrani obrazku # analogicky lze pouzit # setText(QString) # setPicture(QPicture) # setMovie(QMovie) a setNum() self.pixmapLabel.setPixmap(QPixmap('img_2271.jpg')) class FormBackground(QMainWindow): """ Predchozi priklad by sel v tomto pripade nahradit prostou aplikaci obrazku jako pozadi okna bez dalsich widgetu. """ def __init__(self,parent = None,name = None,fl = 0): QMainWindow.__init__(self,parent,name,fl) self.setMinimumSize(800, 600) self.setPaletteBackgroundPixmap(QPixmap('img_2271.jpg')) """ Zde pouze spustim tzv. event loop """ a = QApplication(sys.argv) w = Form() # w = FormBackground() a.setMainWidget(w) w.show() a.exec_loop() Prosím o doplnění dalších GUI, pokud umíte a chcete a máte čas. Ať můžeme srovnávat.
Výtah z konference
> Ahoj .... mam pygame a porad nechapu nahrani obrazku ze souboru. Poradi mi nekdo jak ho jednoduse nahrat?
Takže to co hledáš, je:
hrdina = pygame.image.load('hrdina.jpg')
Jen připomínám, ať si dáš pozor na cesty, obrázek by měl ležet ve stejném adresáři nebo musí být s plnou cestou. Obrázek můžeš použít jakýkoliv, nebo si ho stáhnout ze stránky tutoriálu pygame Posun to (hlava šelmy):
# -*- coding: cp1250 -*- # import a inicializace import pygame, sys from pygame.locals import * pygame.init() # nastavení konstant REZIM=(640, 480) umisteniObrazku=(0,0) obrazovka = pygame.display.set_mode(REZIM) hrdina = pygame.image.load('hrdina.jpg') #načtení obrázku obrazovka.blit(hrdina, umisteniObrazku) # vykreselení na obrazovkku pokracovat=1 while pokracovat: # téměř do nekonečna for udalost in pygame.event.get(): # o tomto více v tutoriálu if udalost.type ==QUIT: # ošetření Alt+F4 pokracovat=0 pygame.display.update() # aktualizace obrazovky pygame.time.delay(100) # cekej pygame.quit() print "Ted jsi zavrel okno. A to je vse :-)"
Není to moc jednoduché, co? V jiných GUI jde pouhé načtení obrázku daleko jednodušeji. PyGame ale je herní modul, takže následně je zase lehčí ovládat pohyb obrázku a případné střílení (kolize s jinými obrázky),....
Pro názornost přikádám jak by to bylo v Tkinteru:
import Tkinter root=Tkinter.Tk() platno=Tkinter.Canvas() platno.pack() obrazek = Tkinter.PhotoImage(file="hrdina.gif") polozka = platno.create_image(100, 100, image=obrazek) root.mainloop()
Vsimni si, ze jsem predelal jpg na gif, protoze Tkinter bohuzel sám o sobě nepodporuje jpg. Vestavěnou podporu ma pro gif a pgm. Pokud chceš používat i jiné formáty, potřebuješ modul PIL (Image) (nutno stáhnout), což je mimochodem skvělá knihovna na práci s obrázky (převod mezi formáty a úprava obrázku - třebas u všech obrázků ve složce změníš rozměry nebo hloubku ...). Použití s Tkinterem pak vypadá takto:
import Tkinter, Image, ImageTk root=Tkinter.Tk() platno=Tkinter.Canvas() platno.pack() obrazekRaw = Image.open("hrdina.jpg") obrazek = ImageTk.PhotoImage(obrazekRaw) polozka = platno.create_image(100, 100, image=obrazek) root.mainloop()
http://www.pythonware.com/products/pil/ , tak lze obrázek otevřít do programu, který je v os pro příslušný typ nastaven:
import Image img = Image.open("test.jpg") img.show()
A takto by to bylo v PyGTK:
import pygtk pygtk.require('2.0') import gtk window = gtk.Window() window.set_title("Obrazek") window.connect("delete-event", gtk.main_quit) image=gtk.Image() image.set_from_file("hrdina.jpg") window.add(image) window.show_all() gtk.main()
# -*- coding: utf-8 -*- """ Jednoduchy priklad nahrani obrazku v GUI toolkitu PyQt. Funguje jak s http://pythonqt.vanrietpaap.nl/ (Windows) tak s http://www.riverbankcomputing.co.uk (Linux) Qt v soucasnosti podporuje nasledujici formaty: PNG, BMP, XBM, XPM a PNM. JPEG, MNG a GIF pomoci podpurnych knihoven pri kompilaci. Vice viz dokumentace Qt Komentare a vyhruzky: petr@yarpen.cz. Ano, je pravdepodobne, ze vas odchyti SpamAssassin. Je to milacek. """ from qt import * # sys je zde potreba pouze k syntatiktickemu predani parametru QApplication import sys class Form(QMainWindow): """ Ukazka nacteni obrazku do widgetu na hlavnim okne. Konstruktor tridy nastavuje umisteni widgetu v okne. Samotne nacteni obrazku provede posledni prikaz. Tohle je pouze ukazka, proto zde neni uvedeno zjistovani rozmeru obrazku, kontrola nacteni apod. Zde opet odkazuji na skvelou dokumentaci Qt (QPixmap.width(), height() apod).""" def __init__(self,parent = None,name = None,fl = 0): QMainWindow.__init__(self,parent,name,fl) formLayout = QGridLayout(self.centralWidget(),1,1,11,6,"formLayout") self.pixmapLabel = QLabel(self, "pixmapLabel"); # velikost okna a widgetu self.pixmapLabel.setMinimumSize(800, 600) self.setMinimumSize(800, 600) formLayout.addWidget(self.pixmapLabel, 0, 0) # vlastni nahrani obrazku # analogicky lze pouzit # setText(QString) # setPicture(QPicture) # setMovie(QMovie) a setNum() self.pixmapLabel.setPixmap(QPixmap('img_2271.jpg')) class FormBackground(QMainWindow): """ Predchozi priklad by sel v tomto pripade nahradit prostou aplikaci obrazku jako pozadi okna bez dalsich widgetu. """ def __init__(self,parent = None,name = None,fl = 0): QMainWindow.__init__(self,parent,name,fl) self.setMinimumSize(800, 600) self.setPaletteBackgroundPixmap(QPixmap('img_2271.jpg')) """ Zde pouze spustim tzv. event loop """ a = QApplication(sys.argv) w = Form() # w = FormBackground() a.setMainWidget(w) w.show() a.exec_loop()
pokud umíte a chcete a máte čas. Ať můžeme srovnávat.