Hallo,
Habe eine recht komplexe Benutzeroberfläche, die ich gerne mit Frames ein wenig übersichtlicher gestalten möchte und auch ne Radiogroup umranden will. In meinem Python-Buch steht nur leider fast nichts dadrüber.
Also, meine Frage: Wie ereuge ich ein Frame und wie bekomme ich es hin, dass es z.B. alles von column 0, row 0 bis column 1, row 13 umrandet? Und wie siehts aus, wenn ich jetzt die ganzen Widgets anordnen will? Kann ich die einfach mit den normalen Befehlen anordnen? So wie ich das verstanden hab, geht das unabhängig von den Widgets in anderen Frames.
Schon mal Danke
VitroN
Frames
-
- User
- Beiträge: 41
- Registriert: Samstag 13. Januar 2007, 15:26
Hallo Vitron!
Um ein Frame Widget zu erstellen, gehst du genauso wie bei der Erstellung eines Labels, Buttons, usw. vor. Zudem musst du jedem Widget, das sich im Frame befinden soll, als erstes Parameter den Namen deines Frames übergeben.
Beispiel:
Ich hoffe es klappt, ist nicht getestet
Um ein Frame Widget zu erstellen, gehst du genauso wie bei der Erstellung eines Labels, Buttons, usw. vor. Zudem musst du jedem Widget, das sich im Frame befinden soll, als erstes Parameter den Namen deines Frames übergeben.
Beispiel:
Code: Alles auswählen
import Tkinter as tk
fenster=tk.Tk()
rahmen=tk.Frame(fenster, bd=2, relief="sunken")
rahmen.pack(padx=10, pady=10)
text=tk.Label(rahmen, text="Im Rahmen")
text.pack()
button=tk.Button(fenster, text="Nicht im Rahmen")
button.pack()
fenster.mainloop()
- Mawilo
- User
- Beiträge: 452
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Hallo Vitron,
ich nutze zur Gruppierung gerne auch ein LabelFrame.
Damit sieht eine Oberfläche oft übersichtlicher und besser strukturiert aus. So bekommst Du auch die Umrandung hin.
Mawilo
ich nutze zur Gruppierung gerne auch ein LabelFrame.
Code: Alles auswählen
import Tkinter as tk
fenster=tk.Tk()
rahmen=tk.LabelFrame(fenster, bd=2, text='Das ist der Rahmen')
rahmen.pack(padx=10, pady=10)
text=tk.Label(rahmen, text="Im Rahmen")
text.pack()
button=tk.Button(fenster, text="Nicht im Rahmen")
button.pack()
fenster.mainloop()
Mawilo
Danke für eure Hilfe...und die Sache mit dem LabelFrame ist hilfreiche
Programmier allerdings mit Klassen und da will Python das Frame nicht als master erkennen...
Er gibt keinerlei Fehler aus, startet die Shell, aber nicht das Benutzerfenster und hängt sich dann auf (also nur das Programm nicht der Rechner)
Hab ich da irgendwas falsch gemacht?
Programmier allerdings mit Klassen und da will Python das Frame nicht als master erkennen...
Code: Alles auswählen
from Tkinter import *
class Programm:
def __init__(self):
hauptfenster = Tk()
rahmen1 = LabelFrame(hauptfenster, bd=2, text='Hallo', font=('MS Sans Serif', 10, 'underline'))
self.LBiologie1 = Label(rahmen1, text='Biologie')
rahmen.pack()
self.LBiologie1.pack()
hauptfenster.mainloop()
Hab ich da irgendwas falsch gemacht?
- Mawilo
- User
- Beiträge: 452
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
In Zeile 9 muss es rahmen1 heisen.
Übergebe das Frame doch an die Klasse. Dann kannst Du das Frame auch als Master verwenden.
Mawilo
Code: Alles auswählen
import Tkinter as tk
class Programm:
def __init__(self):
hauptfenster = tk.Tk()
rahmen1 = tk.LabelFrame(hauptfenster, bd=2, text='Hallo', font=('MS Sans Serif', 10, 'underline'))
self.LBiologie1 = tk.Label(rahmen1, text='Biologie')
rahmen1.pack()
self.LBiologie1.pack()
hauptfenster.mainloop()
Programm()
Mawilo
Code: Alles auswählen
from Tkinter import *
class Programm:
def __init__(self):
hauptfenster = Tk()
rahmen1 = LabelFrame(hauptfenster, bd=2, text='Hallo', font=('MS Sans Serif', 10, 'underline'))
self.LBiologie1 = Label(rahmen1, text='Biologie')
rahmen1.pack()
self.LBiologie1.pack()
hauptfenster.mainloop()
Hab alles ausprobiert: so wie es hier oben steht, mit import Tkinter as tk, mit ner eingenen Klasse für den Rahmen (wo bei ich mir nicht sicher bin wie genau das geht, dass ich die in der anderen class verwende)
Also, er gibt immer diese Fehlermeldung aus:
Traceback (most recent call last):
File "F:\Eigene Dateien\Programm.py", line 277, in <module>
test=Programm()
File "F:\Eigene Dateien\Programm.py", line 25, in __init__
self.LBiologie1 = Label(rahmen1, text='Biologie')
NameError: global name 'rahmen1' is not defined
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Klar ist nichts definiert, wenn Du Deine Klasse nicht abschliesst. Es fehlt nur dass hier:VitroN hat geschrieben: Also, er gibt immer diese Fehlermeldung aus:
Traceback (most recent call last):
File "F:\Eigene Dateien\Programm.py", line 277, in <module>
test=Programm()
File "F:\Eigene Dateien\Programm.py", line 25, in __init__
self.LBiologie1 = Label(rahmen1, text='Biologie')
NameError: global name 'rahmen1' is not defined
Code: Alles auswählen
from Tkinter import *
class Programm:
def __init__(self):
hauptfenster = Tk()
rahmen1 = LabelFrame(hauptfenster, bd=2, text='Hallo', font=('MS Sans Serif', 10, 'underline'))
self.LBiologie1 = Label(rahmen1, text='Biologie')
rahmen1.pack()
self.LBiologie1.pack()
hauptfenster.mainloop()
programm = Programm()# Das hast Du vergessen!
EDIT: So kannst Du den Frame an eine Klasse binden:
Code: Alles auswählen
import Tkinter as Tk
class Hauptfenster(Tk.Frame):
def __init__(self, master):
Tk.Frame.__init__(self, master)
self.pack(expand='yes', fill='both')
self.Button_open = Tk.Button(self,
text='Ok', bg='green',
border="1",relief='ridge',
command=self.opentop2)
self.Button_open.pack(expand='true', anchor='n')
def opentop2(self):
# Oeffnet Fenster 2
oeffnen = Fenster2(self)
class Fenster2(Tk.Toplevel):
def __init__(self, master):
# Ein Toplevel 2 erstellen
Tk.Toplevel.__init__(self, master)
self.Label=Tk.Label(self ,text='Ich bin ein Text',
width=10, height=2)
self.Label.pack(expand='true', fill='both', anchor='n')
self.grab_set()
self.focus_set()
self.wait_window()
def _main():
root = Tk.Tk()
app = Hauptfenster(root)
root.mainloop()
if __name__=='__main__':
_main()