tkinter, Pack-Methode bei Label-Widget

Fragen zu Tkinter.
Antworten
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

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?
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.
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

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()
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.
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

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
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

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......
BlackJack

@bfm: Ich benutze da lieber die Konstanten aus dem Modul weil mich dann der Editor schon auf falsch geschriebene Namen hinweist. :-)
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Komisch, bei mir funktioniert das

Code: Alles auswählen

widget1.pack (side='left')
Schau Dir mal constants.py in der tkinter package an.
Atomkraftwerkaktienbesitzer
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Ene Uran: Funktioniet das hier bei dir auch?

Code: Alles auswählen

widget1.pack (side='1eft')
In specifications, Murphy's Law supersedes Ohm's.
Antworten