Anfängerfrage zu Bildern über TkInter

Fragen zu Tkinter.
Antworten
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Ich versuche, ein einfaches gif-Bild in TkInter in einem Frame darzustellen. Ich habe allerdings noch (fast) gar keine Ahnung von dem Zeugs und das Internet hat mit nicht so richtig weitergeholfen.
Der Code

Code: Alles auswählen

        pictFrame = Frame(root)
	pictFrame.pack(side=TOP, fill=BOTH)

	canvas = Canvas(pictFrame, width = 400, height = 400, bg = 'white')
        canvas.pack()

        myPhoto = PhotoImage(file = 'title.gif')
        #print myPhoto
        canvas.create_image(225, 210, anchor = CENTER, image = myPhoto) 
hilft nicht wirklich. Das ist das beste, was ich bisher hinbekommen habe. Allerdings bekomme ich als Wert von myPhono immer nur "pyimage1" und nichts sinnvolles. Ich hoffe, die Lösung ist (wie ich denke) etwas ganz simples und ich danke im voraus für Hilfe.

P.S. ich habe noch ein zweites (kleines) Problem. Ich habe das icon geändert:

Code: Alles auswählen

          root.iconbitmap('db.ico')
Wenn das Fenster aufgeht, öffnet sich immer noch ein kleines weiteres fenster und schliesst sich schnell wieder. Es stört etwas, hat aber mit dem Programm an sich nichts zu tun. Gibt es eine Möglichkeit, das das fenster nicht kommt? Danke nochmals

Edit (Leonidas): Code in Python-Tags gesetzt.
Flano
User
Beiträge: 43
Registriert: Sonntag 5. September 2004, 14:13

Hallo aoibhell,
ich habe deinen Code kopiert und bei mir ausgeführt. Es funktioniert alles
einwandfrei. Auch das Icon wird angezeigt. Natürlich habe ich ein eigenes
*.gif und *.ico Bild verwendet. Liegt vielleicht bei dir dort der Fehler? Liegen
die beiden Bilder im selben Verzeichnis wie dein Script? Bei mir öffnet sich
auch kein zweites kleines Fenster.

Gruß Flano
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Hallo Flano,
danke für die schnelle Antwort. meine beiden Bilddateien liegen im gleichen Verzeichnis wie das Python-Script. Kann das denn ausschlaggebend sein? Oder sind vielleicht meine Klamotte nicht im "richtigen" ico/gif Format (Ich habe da so ein paar Threads gelesen wo das die Lösung zu sein schien.
Danke
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Problem 1 hat sich gelöst (Die Grafik wird jetzt dargestellt. Code:

Code: Alles auswählen

        bild = ImageTk.PhotoImage(file="title3.gif", master=pictFrame)
        lbl_bild = Label(pictFrame, image=bild)
        lbl_bild.configure(bg="WHITE")
        lbl_bild.pack(padx='0', pady='0')

Das master=pictFrame war ausschlaggebend.
Es bleibt allerdings leider immer noch das Problem, dass sich beim Aufruf des Fensters immer eine kleines Zusatzfenster öffnet und schliesst (sieht halt blöd aus). Das passiert, weil ich das eigene Icon verwendet habe.

Code: Alles auswählen

root = Tk()
root.title(title)
root.iconbitmap("db.ico")
root.iconname('db')
root.iconposition(10,200) 
root.geometry(rootWindowPosition)

Hat da vielleicht noch jemand eine idee, woran es liegen könnte?
Flano
User
Beiträge: 43
Registriert: Sonntag 5. September 2004, 14:13

So bekomme ich ein *.gif Bild in ein Label und
ein *.ico Bild rechts oben in die Fensterleiste.
Vielleicht hilft dir das weiter.

Code: Alles auswählen

from Tkinter import *
root = Tk()

root.title('db')
root.iconbitmap("db.ico")
pictFrame = Frame(root)
pictFrame.pack(side=TOP, fill=BOTH)

bild = PhotoImage(file="title.gif")
lbl_bild = Label(pictFrame, bg = 'white', image=bild)
lbl_bild.pack() 

root.mainloop()
Gruss Flano
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Hallo Flano,
leider hilft mir das bei dem verbleibenden Problem (Das kleine Fenster, dass sich bei einem Fenster mit eigenm Icon öffnet und wieder schliesst), nicht weiter. Herzlichen Dank trotzdem für deine Mühe!
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hi,
Du koenntest deine Zeilen mal nacheinander in die command-line eingeben, da kommt das Fenster direkt (also auch schon vom mainloop).
So kannst du die Zeile genauer bestimmen, wo was unerwartetes kommt.
Wenn bei dir der Code, der bei Flano einfwandfrei geht, nicht geht, versuchs mal mit ner neuinstallation von Python.
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Hallo schlangenbeschwörer,
ich habe deine Tipps ausprobiert, aber leider auch ohne Erfolg. Sobald ich die Zeile

Code: Alles auswählen

root.iconbitmap("db.ico")
auslasse, ist das fester ohne das kurz erscheinende zusatzfenster da. Auch eine Neuinstallation hat leider nicht funktionert. Kann das an dem Problem vielleicht am Format des Icons liegen (Ich habe keine Infos über das geforderte Format gefunden, habe allerdings schon einige ausprobiert).
welches Format funktioniert denn bei dir/euch?
Danke nochmal für die Hilfe

...Edit: Ich habe einen "Pfuschweg" um das Problem gefunden: Ich setze das root.iconbitmap einfach direkt vor den mainloop und so erscheint das ungewollte fenster nur so kurz, dass man es nicht bemerkt...na ja, ist halt wirklich nur Pfusch aber et tut erstma...
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi,

wenn das kein privates icon ist und es nicht allzu groß ist, schreib doch mal, was das hier ausgibt:

Code: Alles auswählen

import base64
import sys
fileInput = open("db.ico", "rb")
sData = fileInput.read()
fileInput.close()
print sys.version
print "\n"+base64.encodestring(sData)
Vielleicht können wir das dann besser nachvollziehen.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Hallo Micheal, bei deinem Programm erhalte ich

2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]
als sys.version
und

Code: Alles auswählen

AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAgAQAAAAAAAAAAAAAAAEA
AAAAAAAXGRgAIyUkADs+PAAjXhAALmUAAEBCQQAyaQQAM2oHAEVIRgAtahAAN2gTADVtDQBJS0oA
L2wTADtsGABMTk0ATVBOAD5vHQBPUlAAUFNRAFJUUwBTVVQAVVdWAEZ5GgBWWVcAWVtaAEZ4KABD
fCQATHgvAFxeXQBdYF4AXmFfAE+DJwBhZGIAWH07AFSAOABkZ2UAZmhnAFyCPwBoa2kAa25sAFmP
NQBjgU0AbXBuAGOKRwBxdHIAaopMAHN2dAB5dXcAdHd1AG2CYgBqh1sAe3h0AHZ5dwBvhGQAaI5U
AHd6eAB9eXsAa5FXAHt9fABulVMAfH99AG6UWgB+gX8AgIKBAHOZXwCChYMAgZB0AISHhQCFiIYA
hYaLAIaJhwB+nWgAf6BiAIiLiQCDm3IAiZh8AIyPjQCNkI4AjpGPAI+SkACEonUAkZSSAJKXjgCL
o3oAkpWTAJSXlQCXno0AnJiaAJCofwCQpoUAmJuZAI2sfgCempwAlaGTAJuenACPrIYAk6iOAJ2g
ngCeoZ8Am6iTAJ+ioACUs4UAoaSiAJa1hwCXtogAo6akAKSnpQCisZQAn7mHAJq5iwCmqacApLOW
AKanrQCsqKoAn7aUAKirqQCcvI0Ar6ynAKe2mQCvq60Ao7uSAKi2oQCtsK4As66xAKq4owCru54A
rrKwALWvuQCtu6UAqcCeALK1swCrwqAArcWbALS3tQC6tbgAurS9AK/HnQCzwasAtseiAL25uwC4
u7kAtcWnALXDrQC5vLoAssmnALfFrwCzya4AusmsAL3AvgDDwbwAw7/BALzMrwC3z6wAvMi6ALzL
tQDBxMIAxMfFAMHRswDBz7kAxcjGAMfOvADGyccAw9O1AMPRuwDMyMoAx8rIAMjLyQDOzMYAyc7E
AMnK0ADPy80Ays7LAMvQxwDN1MMA0c3QAMzQzgDK1sgAy9nDAMzcvgDQ09EAzNjKANHU0gDR0tgA
0tXTANjT1gDT2M4A1NvJAM/dxwDW29IA1dnXANvX2QDX3s0A19vZANje1ADe2dwA2dzaANrd2wDg
294A2+DWANzj0QDb3twA4NrkANzf3QDd4tgA497hAN7j2gDf5tQA3uHfAN/i4ADl4eMA4OThAObi
5QDh5eMA6OPmAOPm5ADl6uAA5ejmAOvm6QDm6ecA5uftAOzo6gDn6ugA7ObwAOjr6QDu6ewA6ezq
AO/r7QDq7usA8ezvAOvv7QDy7fAA7fDuAO7z6QDu8e8A9O/yAO/y8AD38vUA8vXzAPP39AD69fgA
9Pj2APb59wD3+vgA+Pv5APn8+gD/+/0A+v37APr7/wD//P4A///5APv9/wD7//wA//3/APz//gAA
AAAA9vf18/Tz9vr1+fr5+fb++fj4+fr5+fn5+vn5+fn59/n+/vn5+v76+Pb39ff3/vb1+vb09/X0
9ff49PX19fX29/D+hxQPMOH++v7+9/n5+fr+/vr4+fr4+vr3/v7++fn+8/qrBU8ZHc14+V2Mvm/6
cd3dRjRAeKj4RnIwl10lkP72/rYU+twMe1DuLaq/WP5bpaotQEora+MwT1tAO4bL+fP+uRTb+iVy
cgww+rhQ/tQUFoxyuV0wDFL3+Ts5/v71+P6/HdP5RlinJUb6t0b660YlzUATxHEle/5dOzkltPny
+r8U0v5NTecShv6oUPj0Ryj6SjC3lhDjpR2oP43n9/r+txTc/jB2+RbS1HxGv/pYRvpGWIO+Fv5Y
RnZG1PD39Pa5HeOHArfoQPhnGScl+FaW+Cs5+pdY9rgfcVYdpv7y+aUFAQBO+fr6+fr5+vn6+v76
9P7++Pn+/vj4+vj6+fT+042Wg/j+/vj3+PX4/vj3+fj59fb69/f2+vX+9v73/vb4/vr3+fr5+fr2
+vb69vr29/f6+fr4+fb6+Pb5+vn3/vr4+Pb3+Pf4/v7+/vj++P76+f7+/vr+/v76/vj+/v75+vj5
+v75+vn6+fr5+fr5+v74/vn59v729vb49vr29v74+v74/vj++P7++P74/vj++fr5/vf++f7+/vr+
/v75+vn6/vn6+fr5+vn2+vn6+fr59/j3+Pn09f75/vf5+ff+9fj59f739fX19/719ff19ff1+v6+
xd3bt+zN3b70+v74+vr6/vn4+Pn++fj4+f75/v7599Th7PbN7dzf3/rzkll9+Zuo+n53fcuPin6x
cHOtoVSxm67OVIHYfnNz3LMcIjrsGzO1Cw4EoRcJJr0NDs5BA348Wj4+I5QHEQq39JFgx7KLebpp
mHPYeaOO94mb/oVZ4Ji7ka6OzmCkbfDwytqvudzct8PS3KjUr+f61O203L+2+tnU4dTB393G7PHJ
1cHQ4+vf3NPjyd297PjQ7Nnn1N333dvT09Tb28vz/v76+vr6sln2+t2voqqqqpalq5actPT+/vj6
+Pr++vn+9vj1+PggJrU6wV5deHJ8gGtXcYzc+fju4vj2/vb39/r4+vf2+rzkdSzOCWccQ0w2Nwc2
ZM6jm8/O+vX6+Pr5/vn+9v74+f7y+emj61FXSypIKTeCztjZ/vn+9v75/v76+fr2+vn6+vr5+v76
9pxxiGRt4Pr6+vn6+fr5+vn6+f7+/v7+/vf+9/f+9/T+8Ix71P7+9Pf39/73/vf+/v7++fn5+fn5
+fn5+fn5+fb57uL59vb59vb5+fn5+fn5+fn+/v7+/v7+/v7+/vf3/vX+/vX+/vf+/v7+/v7+/v7+
/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAA
als print "\n"+base64.encodestring(sData)

(Sorry für den "langen" Beitrag, aber mit dem gobbledegook da ober kann ich hal aber so was von nix anfangen :))

Danke
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi,

dieses Wirrwar ist Dein Icon, aber in für Menschen zumindest "lesbarer" Schrift, statt in Binärcode. Dadurch können wir ausschließen, dass Du ein Icon benutzt, das nicht geladen werden kann. Bei mir funktioniert Dein Programm ebenfalls einwandfrei, allerdings nutze ich Version:
2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)]
Hat das schon jemand mit Version 2.5.1 positiv getestet?

Grüße,
Michael

ps. Neuinstallation ist nicht unbedingt das, was ich als erstes empfehlen würde. ;-)
Diese Nachricht zersört sich in 5 Sekunden selbst ...
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Hallo Michael,
ich habe das noch nicht gecheckt. ich möchte allerdings auch icht wirklich python deinstallieren und 2.4.1 draufmachen...
Danke
Flano
User
Beiträge: 43
Registriert: Sonntag 5. September 2004, 14:13

Hi,
habe das Script unter Python 2.5.1 getestet und keine Probleme gehabt. Die Sache mit den Icons klappt allerdings nur unter Windows, nicht unter Linux. Unter Linux bekomme ich aber auch kein zweites Fenster zu sehen, sondern eine Fehlermeldung. Tkinter bringt allerdings einige unscheinbare Bildchen mit, die man auch unter Linux als Icons benutzen kann.

Code: Alles auswählen

root.iconbitmap('questhead')
Als Icon bekommt man einen Kopf mit Fragezeichen zu sehen.
Weitere Bildchen sind: 'error', 'info', 'question', 'warning'...?
Vielleicht mal ausprobieren ob das funktioniert.

Gruss Flano
aoibhell
User
Beiträge: 9
Registriert: Sonntag 3. Juni 2007, 01:47

Hallo Flano,
mit deiner Lösung erscheint das ominöse Fenster nicht. Ist schon alles etwas komisch. Aber es ist im Moment auch nicht mehr soo wichtig, denn meine "Pfuschlösung", das iconbitmap erst unmittelbar vor dem mainloop aufzurufen, klappt ganz gut. Man muss jetzt schon genau hinsehen, um noch zu erkennen, dass da ein Fenster auf- und zugeht.
Danke für deine Hilfe!
Antworten