Seite 1 von 1
tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 10:14
von Papp Nase
Hi,
ich hab das kleine Programm geschrieben:
Code: Alles auswählen
#!/usr/bin/env python
import tkinter
root = tkinter.Tk()
widget1 = tkinter.Label (root, text="This is a text", width=50, height = 30)
widget1.pack (side=left)
root.mainloop ()
Fehlermeldung: name-error: name left is not defindet.
Ich habe verschiedene Varianten ausprobiert: LEFT, left, Left - keine klappt. In einem Tutorial habe ich gelesen, dass die Pack-Methode bei side die Werte TOP, BOTTOM, LEFT, RIGHT annehmen kann. Warum kommt dann bei mir die Fehlermeldung?
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 10:20
von BlackJack
@Papp Nase: Wo denkst Du denn das `left`, `Left`, oder `LEFT` definiert ist? Du kannst nicht Namen benutzen die einfach so aus dem Nichts kommen und nicht zu den eingebauten Namen gehören die in der Dokumentation stehen. `LEFT` ist ein Name der im `tkinter`-Modul definiert ist. Also musst Du den genau wie alle anderen Namen aus anderen Modulen, entweder über das Modulobjekt referenzieren, oder explizit in den Namensraum des aktuellen Moduls importieren. Also ``tkinter.LEFT`` oder ``from tkinter import LEFT`` um dann `LEFT` benutzen zu können.
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 11:41
von Papp Nase
Danke, daran hab ich nicht gedacht, da ich das Paket nicht mit "from tkinter import*" eingebunden hab.
Ich hab jetzt dieses Programm gemacht:
Code: Alles auswählen
#!/usr/bin/env python
import tkinter
root = tkinter.Tk()
root2 = tkinter.Tk()
widget1 = tkinter.Label (root, text="This is a text1", width=50, height = 30)
widget1.pack (side=tkinter.LEFT)
widget2 = tkinter.Label (root, text="This is a text2", width=50, height = 30)
widget2.pack (side=tkinter.RIGHT)
widget3 = tkinter.Label (root, text="This is a text_top", width=50, height = 30)
widget3.pack (side=tkinter.TOP)
widget4 = tkinter.Label (root, text="This is a text_bottom", width=50, height = 30)
widget4.pack (side=tkinter.BOTTOM)
widget5 = tkinter.Label (root2, text="fenster2", width=20, height = 10)
widget5.pack ()
root.mainloop()
Darin gibt es root und root2. Der Label widget5 wird root2 zugeordnet - soweit klar. Zum Schluss schreibe ich root.mainloop(). Dennoch wird auch das Fenster erstellt, dass mit root2 initialisiert wurde. Das verstehe ich nicht, ich wäre jetzt davon ausgegangen, dass nur das Fenster mit den Elementen, die root zugeordnet wurden, gestartet würde und nicht das Label bei root2.
Ich hätte gedacht, dass das nur ginge, wenn das steht:
root.mainloop()
root1.mainloop()
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 11:56
von BlackJack
@Papp Nase: Von `Tk` darf es grundsätzlich immer nur ein Exemplar zur gleichen Zeit geben. Das ist das *Haupt*fenster. Wenn man mehr davon erstellt, dann ist das Verhalten des Programms mehr oder weniger undefiniert. Zusätzliche Fenster kann man mit `Toplevel` erstellen.
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 12:04
von Papp Nase
Danke für die Info. Wenn ich zuerst das Fenster root2 schloss und dann root1, dann kam keine Fehlermeldung, aber wenn ich erst root1 beendete, dann kam eine Speicherfehlermeldung: invalid block XXXX
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 13:38
von bfm
Papp Nase hat geschrieben:Hi,
ich hab das kleine Programm geschrieben:
Code: Alles auswählen
#!/usr/bin/env python
import tkinter
root = tkinter.Tk()
widget1 = tkinter.Label (root, text="This is a text", width=50, height = 30)
widget1.pack (side='left')
root.mainloop ()
Fehlermeldung: name-error: name left is not defindet.
Ich habe verschiedene Varianten ausprobiert: LEFT, left, Left - keine klappt. In einem Tutorial habe ich gelesen, dass die Pack-Methode bei side die Werte TOP, BOTTOM, LEFT, RIGHT annehmen kann. Warum kommt dann bei mir die Fehlermeldung?
also bei mir hat das auf Anhieb funktioniert, wenn man das 'left' in Hochkomma setzt

'side' ist ja eine Information an den Packer, wie er das Widget ausrichten soll: left, right, top oder bottom......
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Donnerstag 3. Juli 2014, 13:40
von BlackJack
@bfm: Ich benutze da lieber die Konstanten aus dem Modul weil mich dann der Editor schon auf falsch geschriebene Namen hinweist.

Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Sonntag 13. Juli 2014, 23:21
von Ene Uran
Komisch, bei mir funktioniert das
Schau Dir mal
constants.py in der tkinter package an.
Re: tkinter, Pack-Methode bei Label-Widget
Verfasst: Sonntag 13. Juli 2014, 23:26
von pillmuncher
@Ene Uran: Funktioniet das hier bei dir auch?