2017-06-07 4 views
0

Ich bin neu mit Tkinter und ich möchte eine "Form" erstellen (ich weiß nicht wirklich, wie man es nennt), die in die Datenbank schreiben. Ich bin damit fertig, aber ich bin frustriert wegen des Layouts.Wie positioniere ich mich in Tkinter?

Ich habe diesen Code, der die "Form" zu machen:

self.parent.title("Pozi") 
    self.pack(fill = BOTH, expand=True) 

    frame1 = Frame(self) 
    frame1.pack(side = LEFT) 

    lbl1 = Label(frame1, text = "ĂtadĂł kártyája", width = 15) 
    lbl1.pack(side = TOP, padx=5) 

    atadoText = StringVar() 
    atadoText.set('') 
    self.entry1 = Entry(frame1, textvariable=atadoText) 
    self.entry1.pack(side = BOTTOM, padx=5) 
    atadoText.trace('w',atado_enter) 
    self.atadoText = atadoText 
    self.entry1.focus() 

    frame2 = Frame(self) 
    frame2.pack(side = RIGHT) 

    lbl2 = Label(frame2, text = "ĂtvevĹ‘ kártyája", width = 15) 
    lbl2.pack(side = TOP, padx=5, expand=True) 

    atvevoText = StringVar() 
    atvevoText.set('') 
    self.entry2 = Entry(frame2, textvariable = atvevoText) 
    self.entry2.pack(side = BOTTOM, padx=5) 
    atvevoText.trace('w', atvevo_enter) 
    self.atvevoText = atvevoText 

    frame3 = Frame(self) 
    frame3.pack(side = RIGHT) 

    lbl3 = Label(frame3, text = "ĂrvevĹ‘ kártyája", width = 15) 
    lbl3.pack(side = TOP, padx=5, expand=True) 

    lblText = StringVar() 
    lblText.set('') 
    self.entry3 = Entry(frame3, textvariable = lblText) 
    self.entry3.pack(side = TOP, padx=5, expand=True) 
    lblText.trace('w', lbl_count) 
    self.lblText = lblText 


    lbl4 = Label(frame3, text = "Title", width = 15) 
    lbl4.pack(side = TOP, anchor=N, padx=5, pady=5) 

    self.txt = Text(frame3) 
    self.txt.pack(fill = BOTH, side = TOP, padx=5, pady=5, expand=True) 

es so etwas wie das schafft: enter image description here

und ich möchte etwas wie folgt aussieht. Aber ich appriciate jede Idee: enter image description here

Antwort

1

Zunächst einmal haben Sie keine Angst googeln über pack manager und vor allem über packer algorithm, und danach versuchen, zu verstehen, warum Sie bekommen, was Sie erhalten.

Aufgrund der Relativität in pack Logik ist es keine leichte Aufgabe für Anfänger, horizontale und vertikale Positionierung von Widgets zu steuern. Erinnern Sie sich deshalb an das Prinzip "Teile und herrsche" und behandle dein Programmlayout als eine Menge von Blöcken, in denen wir das Widget in horizontaler Reihenfolge oder in vertikaler Reihenfolge platzieren, ohne es zu mischen.

Ihr Layout Betrachten sieht es so aus: layout

Wo jeder roten Block ein Frame Widget + Root (oder "Master" Frame, fühlen Sie sich frei zu erstellen) ist mit einer Platzierung Ordnung.

etwas zu repräsentieren, wie dies diese Schnipsel versuchen:

try: 
    import tkinter as tk 
except ImportError: 
    import Tkinter as tk 

root = tk.Tk() 

frame1 = tk.Frame() 
frame1.pack() 

for _ in range(2): 
    i_frame = tk.Frame(frame1) 

    label = tk.Label(i_frame, text='Sample%d' % _) 
    label.pack(padx=200) 

    entry = tk.Entry(i_frame) 
    entry.pack(padx=200) 

    i_frame.pack(side='left', ipady=25) 

frame2 = tk.Frame() 
frame2.pack() 

label = tk.Label(frame2, text='Sample3') 
label.pack() 

entry = tk.Entry(frame2) 
entry.pack() 

label = tk.Label(frame2, text='Title', width=15) 
label.pack() 

txt = tk.Text(frame2) 
txt.pack() 

root.mainloop() 

Denken Sie auch daran, es ist ein grid Manager! Mit diesem Manager können Sie Layout als Tabelle behandeln, also probieren Sie es auch aus!

+0

Ich bin mir nicht sicher, dass Sie wissen, was "teile und herrsche" wirklich bedeutet, aber ich danke für die Antwort. Ich kann mein Problem damit lösen. Und danke für den Netzbetreiber, ich habe noch nie davon gehört. – Daniel

Verwandte Themen