Bild einfügen

Fragen zu Tkinter.
nobody
User
Beiträge: 7
Registriert: Donnerstag 14. April 2005, 09:01
Kontaktdaten:

Bild einfügen

Beitragvon nobody » Donnerstag 21. April 2005, 09:05

Hallo,ich versuche jetzt schon länger ein Bild einzufügen und zwar mit folgendem Script:


PhotoImage(file='www.gif')


Was mache ich falsch, fehlt etwas?

Dankefür eure Hilfe,das macht mich wahnsinnig^^
nobody is perfect^^
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Beitragvon Mr_Snede » Donnerstag 21. April 2005, 09:36

Code: Alles auswählen

from Tkinter import *
root = Tk()
c = Canvas(root, width="2c",height="2c")
c.pack()
bild = PhotoImage(file=r"/home/sabba/in/mr_snede-calvin.gif")
c.create_image(0, 0, anchor=NW, image=bild)
root.mainloop()


Das Beispiel ist aus "Python GE-PACKT" Seite 420

cu Sebastian

EDIT by mawe: Code in Python-Tags gesetzt. Sieht einfach besser aus
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Donnerstag 21. April 2005, 12:42

Hi!

Prinzipiell musst Du das PhotoImage erst auf ein Widget packen, damit Du es siehst :wink: Mr_Snede hat ja schon ein Beispiel mit einem Canvas gezeigt. Du kannst auch Buttons oder Labels nehmen:

Code: Alles auswählen

Button(image=bild)
Label(image=bild)


Gruß, mawe
nobody
User
Beiträge: 7
Registriert: Donnerstag 14. April 2005, 09:01
Kontaktdaten:

Beitragvon nobody » Freitag 22. April 2005, 08:13

Erstmal danke, aber das klappt irgendwie überhaupt nicht bei mir. Das Bild soll in die Startseite, Über den Button Starten. Ich schaff das irgendwie nicht, bitte leider nochmals um Hilfe;

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: cp1252 -*-

IN_IDLE = 0

import sys
from Tkinter import *

class HauptFenster:

    def __init__(self):
        self.root=Tk()
        self.root.title("Quiz")
        self.b_1=Button(self.root,text="starten",command=quiz)
        self.b_1.pack()

        Label(image='unbenannt.gif')



class quiz:


    def __init__(self):

        self.root=Tk()
         
        self.root.title("Quiz")

        self.choice=StringVar()

        self.database=DataBase('localhost','irgendwer','einedatenbank','einetabelle','ein....')
       
        self.cols_names=["1","2","3","4"]

         # Spaltennamen, der aktuellen Tabelle werden ermittelt
         
               

# TEXT?? FRAGEN?? ##
       
        #entsprechend den ermittelten Namen wird das SF dynamisch aufgebaut

     
        for i in range(len(self.cols_names)):
            self.rb=Radiobutton(self.root,text=self.cols_names[i],
                        value=self.cols_names[i],
                        variable=self.choice)
            self.rb.grid(row=i+2,column=1)

           

        self.b_1=Button(self.root,text="antworten",command=self.get_selected)
        self.b_1.grid(row=i+1,column=0)
       
        self.root.mainloop()


    def get_selected(self):
        choice=self.choice.get()
        print choice
        # Funktion zum Testen was ausgegeben wird.
        # Wie oben beschrieben Ergebnis nur, wenn es alleine verwendet wird.

       
if __name__=="__main__":
        hf=HauptFenster()


Edit (Leonidas): Wie Mr_Snede schon suggerierte, Code in Python Tags gesetzt.
nobody is perfect^^
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Beitragvon Mr_Snede » Freitag 22. April 2005, 10:32

Bitte setze Deinen Quellcode in (Python)Code Tags.
Einfach quote durch: python bzw: /python in den eckigen Klammern ersetzen. (ich bin wie du an meinen vorigen Post siehst auch schon drüber gestolpert ;-)
Dann bleibt die Einrückung erhalten.

Wenn du Fehlermeldungen bekommst, ist es hilfreich diese auch zu posten.

cu Sebastian
nobody
User
Beiträge: 7
Registriert: Donnerstag 14. April 2005, 09:01
Kontaktdaten:

Beitragvon nobody » Freitag 22. April 2005, 19:48

erstmal danke für das einrücken, werde es mir merken, hier die Meldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "\test.py", line 77, in ?
    hf=HauptFenster()
  File "\test.py", line 17, in __init__
    c = Canvas(root, width="2c",height="2c")
NameError: global name 'root' is not defined


leider sagt mir ausser den Zeilen nix, habe in den Zeilen nen bisel rum experimentiert konnte aber nix finden.
nobody is perfect^^
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 22. April 2005, 20:14

Dein Programm kann die Variable root nicht erreichen. Du musst die Variable irgendwie der Funktion übergeben die das Canvas erstellt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 22. April 2005, 21:30

Hi nobody!

Naja, in Deinem Traceback steht eine Fehlermeldung mit einem Canvas, in Deinem Code kommt aber kein Canvas vor :shock:
Hast wahrscheinlich vergessen zu posten, jedenfalls gehört statt root einfach self.root rein (vermute ich mal).

Code: Alles auswählen

Label(image="unbenannt.gif")

Na so nicht. Du musst schon zuerst ein PhotImage erstellen, das kannst Du dann so einbinden:

Code: Alles auswählen

bild = PhotImage(file="unbenannt.gif")
Label(image=bild)

Noch was zu Deinem Code: Tk() aus einer Tk-Anwendung heraus aufzurufen ist nicht sehr ratsam. Bestes Beispiel ist idle (=Tk-Anwendung). Wenn Du in idle Tk aufrufst, kommen manchmal die seltsamsten Sachen zustande :wink:
Verwende für die Klasse quiz lieber ein Toplevel.

Gruß, mawe
nobody
User
Beiträge: 7
Registriert: Donnerstag 14. April 2005, 09:01
Kontaktdaten:

Beitragvon nobody » Samstag 23. April 2005, 09:24

Nochmals vielen Dank an euch, jetzt habe ich mal den letzten Code von mawe eingebaut und bekam folgende Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "test.py", line 75, in ?
    hf=HauptFenster()
  File "test.py", line 17, in __init__
    bild = PhotImage(file="www.gif")
NameError: global name 'PhotImage' is not defined


Jetzt habe ich mal ne Frage: wieso ist "PhotoImage" nicht definiert?! Müsste doch eigentlich bei Python 2.4.1 klappen!! Und warum zur Hölle ist es so schwer ein Bild einzubinden???

Danke mal wieder im Vorraus^^
n0b0dy
Zuletzt geändert von nobody am Sonntag 24. April 2005, 08:10, insgesamt 1-mal geändert.
nobody is perfect^^
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Samstag 23. April 2005, 20:05

Hi nobody!

nobody hat geschrieben: bild = PhotImage(file="www.gif")
NameError: global name 'PhotImage' is not defined

PhotoImage ist schon definiert, aber PhotImage nicht :)

Und so schwer ist ein Bild einfügen auch nicht: Du erzeugst ein PhotoImage und packst es auf ein Widget. Das wars. :wink:

Gruß, mawe
Zuletzt geändert von mawe am Sonntag 24. April 2005, 06:43, insgesamt 1-mal geändert.
Gast

Beitragvon Gast » Samstag 23. April 2005, 23:50

@ nobody

hi,

:D freut mich ja, dass einiges an code von mir in deine anwendung gefunden hat. oder zufall?
oder der shiraz ist heute zu stark, :D

lg

rolgal
nobody
User
Beiträge: 7
Registriert: Donnerstag 14. April 2005, 09:01
Kontaktdaten:

Beitragvon nobody » Sonntag 24. April 2005, 08:09

Ich glaube das schiesst für mich jetzt den Vogel ab. Jetzt kommt keine Fehlermeldung mehr, sondern das TK inter Fenster öffnet sich so, ohne Bild. Wenn ich dann auf starten gehe kommt dann der Error und weiter funzt der nicht. Ich habe zwar versucht mich einzulesen in dieses Thema, aber die Begriffe widget und cavas sagen mir nix, unter google finde ich nur Onlineshop :D könnt mir das mal kurzeiner erklären, oder mir nen Link zu nen entsprechenden Kurs gebeb?

thx

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "test.py", line 33, in __init__
self.database=DataBase('localhost','irgendwer','einedatenbank','einetabelle','ein....')
NameError: global name 'DataBase' is not defined
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "test.py", line 33, in __init__
self.database=DataBase('localhost','irgendwer','einedatenbank','einetabelle','ein....')
NameError: global name 'DataBase' is not defined




daskommt jetzt als Error, nach den Klick auf starten, da war vorher nix, hat alles gefunzt.
nobody is perfect^^
Gast

Beitragvon Gast » Sonntag 24. April 2005, 09:30

hi 8)

naja, es gibt DataBase eben nicht.

wenn man code übernimmt muss man eben immer schauen, was man davon braucht und was nicht.

DataBase ist ein modul, das du erst importieren musst.

mfg

rolgal
Gast

Beitragvon Gast » Sonntag 22. Mai 2005, 14:48

kann mir vielleicht jemand helfen
ich will jpeg-bilder einfügen
PhotoImage geht aber nur mit gifs
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Sonntag 22. Mai 2005, 14:57

Hi!

Hatten wir schon mal, Du brauchst PIL:

Code: Alles auswählen

from Tkinter import *
from PIL import Image, ImageTk

root = Tk()
image = Image.open('homer.jpg')
photo = ImageTk.PhotoImage(image)
Label(image=photo).pack()
root.mainloop()


Gruß, mawe

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder