Anordnung von widgets

Fragen zu Tkinter.
Antworten
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

Hi!
Ich mache gerade meine ersten Schritte mit Tkinter.
Dabei habe ich ein Problem, verschiedene widgets anzuordnen:
Ich habe Buttons, Labels, Entries und, was Probleme bereitet, Radiobuttons.
Erste drei Elemente hab ich wunderbar mit .grid anordnen können, wie es meinen Wünschen entsprochen hat. Nur die Radiobuttons scheinen auf .grid allergisch zu reagieren:

Code: Alles auswählen

radio1.grid(row=7,column=1)
AttributeError: 'None' object has no attribute 'grid'
Somit fällt die Anordnung mit .grid wohl flach.
Hat jemand eine Idee, wie ich es sonst machen könnte?
.place ist mit nicht so sympathisch, bleibt wohl nur noch .pack.
Damit hab ich versucht mittels .pack(side=...) eine gescheite Anordnung hinzubekommen, aber das sieht echt blöd aus.

Hat jemand eine bessere Idee?

Grüße, david
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi david,

hast du dir mal die Fehlermeldung genau angeschaut? radio1 scheint auf None zu stehen und kein Radiobutton zu sein. Nen bisschen Code, um die Stelle wo der Fehler ausgegeben wird, würde uns beim Helfen auch helfen.


Gruß

Dookie
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

Ok, hier das Skript:

Code: Alles auswählen

#!/usr/bin/env python

from Tkinter import *
import sys

root=Tk()                                                     
root.title('Cd-Labeler')                                      

v = IntVar()
v.set(2)                                 

label2=Label(root,text='Interpret')                             #label2: Interpret
label2.pack()
eingabe1=Entry(root,background='white')                               #eingabezeile1: ->Interpret
eingabe1.pack()
label3=Label(root,text='Titel der CD')                               #label3: Titel der CD
label3.pack()
eingabe2=Entry(root,background='white')                              #eingabezeile2: -> Titel der CD
eingabe2.pack()

label4=Label(root)                                               #label3: leer->Abstandshalter
label4.pack()


button1=Button(root,text='Label erstellen',command=sys.exit)         #button1: Label erstellen
button1.pack()




radio1=Radiobutton(root, text='Keine', variable=v, value=1).pack(anchor=W) #Radiobuttons: -> Art der Nummerieunrg
radio2=Radiobutton(root, text='1 2 3', variable=v, value=2).pack(anchor=W)
#radio3=Radiobutton(root, text='1) 2) 3)', variable=v, value=3).pack(anchor=W)
#radio4=Radiobutton(root, text='1. 2. 3.', variable=v, value=4).pack(anchor=W)
#radio5=Radiobutton(root, text='1: 2: 3:', variable=v, value=5).pack(anchor=W)


#Positionierung:

button1.grid(row=6,column=0)
label4.grid(row=2,column=0)
eingabe1.grid(row=0,column=1)
label2.grid(row=0,column=0)
label3.grid(row=1,column=0)
eingabe2.grid(row=1,column=1)
radio1.grid(row=7,column=1)

root.mainloop()
Grüße,david
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Hallo david
Du weist radio1 den Rückgabewert der Methode pack() zu. Du solltest die Varible erst zuweisen und dann mit radio1.pack() die Methode getrennt aufrufen.

Gruss
Christoph
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beziehungsweise gar kein pack aufrufen, wenn (wie hier) später grid verwendet wird... Zwei Geometriemanager an einem Widget beisen sich nämlich arg doll. Auch sollte man in einem Frame / Toplevel immer nur einen Manager benutzen und wenn man wechsel will, sollte man halt einen Unterframe anlegen.
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

:idea:
Danke genau das wars!

Grüße, david
Antworten