Frames anordnen

Fragen zu Tkinter.
Antworten
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

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.
Zuletzt geändert von Anonymous am Mittwoch 2. Januar 2013, 09:06, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codetags gesetzt.
Gruß aus DD
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

Zusatzfrage: wie ordnet man den Text rechts- bzw. linksbündig.
Er steht zentriert, was hier gerade nicht auffällt.
Gruß aus DD
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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.
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.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

BTW: Wir sind hier auch im falschen Forum --> Tkinter-Forum !!!
BlackJack

@pixewakb: Jetzt wo Du's erwähnst… Verschoben. :-)
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

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.
Gruß aus DD
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

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.
Gruß aus DD
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

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.)
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

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.
Gruß aus DD
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.
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

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.
Gruß aus DD
Benutzeravatar
kbe
User
Beiträge: 27
Registriert: Mittwoch 26. Dezember 2012, 12:10

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:
Gruß aus DD
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

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