Seite 1 von 1

Frames anordnen

Verfasst: Montag 31. Dezember 2012, 18:41
von kbe
Dazu sind schon viele Fragen im Forum vorhanden.
Gestattet mir trotzdem eine ganz einfache (für euch)
Kann mir jemand die 4 Frames nebeneinander anordnen.

Code: Alles auswählen

import  tkinter
main = tkinter.Tk()

fr1 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr1.pack()
fr2 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr2.pack()
fr3 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr3.pack()
fr4 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr4.pack()
lb1 = tkinter.Label(fr1, text="Label1",
        relief="sunken", bd=1)
lb1.place()
lb2 = tkinter.Label(fr2, text="Label2",
        relief="sunken", bd=1)
lb2.place()
lb3 = tkinter.Label(fr3, text="Label3",
        relief="sunken", bd=1)
lb3.place()
lb4 = tkinter.Label(fr4, text="Label4",
        relief="sunken", bd=1)
lb4.place()
main.mainloop()
Ich hatte es schon mal.

Re: Frames anordnen

Verfasst: Montag 31. Dezember 2012, 18:57
von kbe
Zusatzfrage: wie ordnet man den Text rechts- bzw. linksbündig.
Er steht zentriert, was hier gerade nicht auffällt.

Re: Frames anordnen

Verfasst: Montag 31. Dezember 2012, 19:19
von pixewakb
Brauchbare Hilfe

http://effbot.org/tkinterbook/

Hab schon lange nicht mehr mit tkinter gearbeitet, daher gerade keinen Plan, aber man konnte das über pack() - wenn du diesen Geometry Manager nutzen willst - einstellen.

Schau doch bitte mal hier, damit solltest du das alles selbst lösen können:

http://effbot.org/tkinterbook/pack.htm

und zur Textausrichtung:

http://effbot.org/tkinterbook/label.htm

Ich hab mal die Textausrichtung in tkinter versucht - ich nutze wie du Python 3.2, d. h. man muss beim effbot-Skript was rumprobieren, weil das noch für 2.7 geschrieben wurde:

Code: Alles auswählen

from tkinter import *

master = Tk()

w = Label(master,
          text="Das ist ein Test,\nhier soll der Text linksbündig\nausgerichtet werden.",
          anchor="w",
          justify="left")

t = Label(master,
          text="Das ist ein Test,\nhier soll der Text linksbündig\nausgerichtet werden.",
          anchor="e",
          justify="right")

w.pack()
t.pack()

mainloop()
Sieht nicht schön aus, das geht bestimmt schöner, jedenfalls habe ich mich mit solchen Ergebnissen nicht zufriedengegeben, als ich noch hauptsächlich mit tkinter gearbeitet habe.

Re: Frames anordnen

Verfasst: Montag 31. Dezember 2012, 19:45
von BlackJack
@kbe: `place()` sollte man vermeiden. Absolute Positionierung ist nicht mehr zeitgemäss und schafft in den meisten Fällen mehr Probleme als sie löst.

Re: Frames anordnen

Verfasst: Montag 31. Dezember 2012, 19:49
von pixewakb
BTW: Wir sind hier auch im falschen Forum --> Tkinter-Forum !!!

Re: Frames anordnen

Verfasst: Montag 31. Dezember 2012, 20:33
von BlackJack
@pixewakb: Jetzt wo Du's erwähnst… Verschoben. :-)

Re: Frames anordnen

Verfasst: Dienstag 1. Januar 2013, 09:09
von kbe
Hallo pixewakb,
danke für deinen Hinweis (der nicht nur sagte, was ich nicht machen soll).
Aber wenn du nicht mit tkinter arbeitest, womit dann.
Ich meine natürlich kostenloses.

Re: Frames anordnen

Verfasst: Dienstag 1. Januar 2013, 14:28
von Hyperion
kbe hat geschrieben: Aber wenn du nicht mit tkinter arbeitest, womit dann.
Wirf doch mal einen Blick auf die Forum-Themen-Gruppierung ;-) Da sollte Dir ins Auge springen, dass es wohl einige Alternativen zu Tk gibt... Details kannst Du auch im wiki nachlesen.

Re: Frames anordnen

Verfasst: Dienstag 1. Januar 2013, 19:11
von kbe
ich kriegs nicht hin.

Code: Alles auswählen

import  tkinter
main = tkinter.Tk()

fr1 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr1.pack(anchor="nw")
fr2 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr2.pack(anchor="n")
fr3 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr3.pack(anchor="ne")
fr4 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr4.pack(anchor="se")
lb1 = tkinter.Label(fr1, text="Label1",
        relief="sunken", bd=1, justify="left")
lb1.pack(anchor="nw")
lb2 = tkinter.Label(fr2, text="Label2",
        relief="sunken", bd=1)
lb2.pack(anchor="n")
lb3 = tkinter.Label(fr3, text="Label3",
        relief="sunken", bd=1)
lb3.pack(anchor="ne")
lb4 = tkinter.Label(fr4, text="Label4",
        relief="sunken", bd=1)
lb4.pack(anchor="se")
main.mainloop()
Die Frames werden hin und her geschoben, aber nicht rauf und dahinter.

Re: Frames anordnen

Verfasst: Dienstag 1. Januar 2013, 19:57
von pixewakb
Um deine letzte Frage an mich zu beantworten: Eigentlich müsste ich mir PySide ansehen, defacto arbeite ich aber i. d. R. mit PyQt - leider reine Bequemlichkeit.

Zu deinem Quelltext. Versuch doch bitte mal folgenden Quellcode:

Code: Alles auswählen

import  tkinter

main = tkinter.Tk()

fr1 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr1.pack(side="left")

fr2 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr2.pack(side="left")

fr3 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr3.pack(side="left")

fr4 = tkinter.Frame(main, width=100, height=22, relief="sunken", bd=1)
fr4.pack(side="left")

lb1 = tkinter.Label(fr1, text="Label1",
        relief="sunken", bd=1, justify="left")
lb1.pack()

lb2 = tkinter.Label(fr2, text="Label2",
        relief="sunken", bd=1)
lb2.pack()

lb3 = tkinter.Label(fr3, text="Label3",
        relief="sunken", bd=1)
lb3.pack()

lb4 = tkinter.Label(fr4, text="Label4",
        relief="sunken", bd=1)
lb4.pack()

main.mainloop()
Arbeite bitte (!) mehr mit Leerzeilen, das ist ein Codegewirr, wo man erst einmal etwas schlucken muss, um sich dann zu überwinden, dann mal Enter zu tippen. Versuch Dinge, die zusammengehören durch Leerzeilen zu gruppieren, insbesondere dann, wenn am Code noch gearbeitet wird.

Zu meiner Änderung. Ich habe mit left gearbeitet und bei den Labels die Platzierung rausgenommen, da würde ich auch mit "left" arbeiten, aber da die Labels in die Frames kommen, ist über die Platzierung der Frames deren Platzierung erledigt.

Ich hoffe, dass das etwas verständlich ist. (Mir fehlen etwas die Worte, das elegant zu formulieren.)

Re: Frames anordnen

Verfasst: Mittwoch 2. Januar 2013, 08:32
von kbe
Herzlichen Dank. Das hat mir geholfen. Ich habe herumprobiert und herumprobiert. Es waren wohl zu viele mögliche Varianten.
Hauptsächlich habe ich "Python 3" von Ernesti, Johannes; Kaiser, Peter benutzt.
Dort geht es wie in solchen Büchern üblich zu:
Zuerst werden die einfachsten Dinge lang und breit beschrieben. Dann kommt das komplizierte kurz und knapp.
Dein Blog ist interessant.

Re: Frames anordnen

Verfasst: Mittwoch 2. Januar 2013, 09:12
von BlackJack
@kbe: Falls es sich um das „umfassende Handbuch” handelt, da war zumindest die Ausgabe für Python 2.x teilweise nicht gut. Objektorientierung in Python sollte man aus dem zum Beispiel nicht lernen. Die Autoren hatten da wohl Erfahrung in anderen Programmiersprachen und haben die 1:1 auf Python übertragen. Ich weiss nicht ob sich da in der Python 3-Auflage etwas zum besseren getan hat. Kannst die Kritikpunkte ja mal hier im Forum suchen und schauen ob das immer noch so im Buch steht.

Re: Frames anordnen

Verfasst: Mittwoch 2. Januar 2013, 09:31
von kbe
pixewakb hat mich auf PyQT aufmerksam gemacht, Bevor ich mein Programm weiter bearbeite, werde ich erst einmal PyQt näher betrachten.
Ich hoffe, hier im Forum passende Hinweise zu finden.

Re: Frames anordnen

Verfasst: Mittwoch 2. Januar 2013, 10:57
von kbe
Noch ein letzter Beitrag von mir in diesem Thema:
Man soll nicht einfach anfangen, sondern sich erst beraten lassen.
Ich habe PyQt installiert. Das ist doch das, was man benutzen kann.
Eine solche grafische Oberfläche habe ich schon mal bei VB98 gesehen und mich gefragt, warum Python das nicht auch kann.
Also, ab jetzt gehts vorwärts. :lol:

Re: Frames anordnen

Verfasst: Mittwoch 2. Januar 2013, 11:10
von sparrow
Wenn es dir um einen GUI-Builder geht, also wenn du eine Oberfläche zusammenklicken willst, das kann man mit TK natürlich auch machen. Die entsprechenden Tools gibt es auf jeden Fall.