Wie Zeile Links rechtfertigen, label-und Eingabefeldern in Tkinter grid
Ich bin noch ziemlich neu in Tkinter und Klassen, aber ich versuche nach Links zu rechtfertigen labels und Eingabefeldern jeweils in eine eigene Spalte einer Tkinter-raster. Ich bin mit Justify=LEFT
, aber es scheint keine Auswirkungen, wie die Etiketten Aussehen, zentriert und in die Eingabefelder start, wo das Etikett endet.
from Tkinter import *
class LabeledEntry(Frame):
def __init__(self, parent, *args, **kargs):
text = kargs.pop("text")
Frame.__init__(self, parent)
Label(self, text=text, justify=LEFT).grid(column=0,row=0)
Entry(self, justify=LEFT, *args, **kargs).grid(column=1, row=0)
class User_Input:
def __init__(self, parent):
fields = ['Text Label 1', 'This is the text Label 2']
GUIFrame =Frame(parent)
GUIFrame.pack(expand=True, anchor=NW)
parent.minsize(width=350, height=325)
field_index = 1
for field in fields:
self.field = LabeledEntry(GUIFrame, text=field)
self.field.grid(column=0, row=field_index)
field_index += 1
self.Button2 = Button(parent, text='exit', command= parent.quit)
self.Button2.place(x=25, y=300)
root = Tk()
MainFrame =User_Input(root)
root.mainloop()
InformationsquelleAutor user2242044 | 2015-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dein problem liegt in der Tatsache, dass jedes mal Sie erstellen eine neue Instanz der
LabeledFrame
stellen Sie sowohl dieEntry
&Label
innerhalb der gleichenFrame
.Den
grid
Einstellungen für diesesFrame
sind getrennt von der anderenFrame
, so ist es unmöglich fürLabeledFrame
s um die Ausrichtung der Spalten, wie Sie haben nicht die gleichen Werte für die Spaltenbreite.Normalerweise zu erreichen, was Sie sind, nachdem Sie lediglich
sticky = W
imgrid
Optionen für dieEntry
widget, um Links zu rechtfertigen, den Inhalt der Zelle. Dies wird jedoch nur Arbeit für jeden einzelnenFrame
verlassen, den Inhalt jeder einzelnenLabeledFrame
aus der Ausrichtung.Einfachste Weg, dies zu beheben, ohne viel code zu ändern:
Werden Sie wollen, um eine Zeile hinzuzufügen, um Ihre
for
Schleife. Wenn Sie geben Sie eine großen Mindest-Breite der Spalte, dieself.field
'sFrame
eingefügt ist, können Sie sicher sein, dass sich die Dinge richten, wie Sie wollen. Außerdem habe ich config-Optionen, um diegrid
Anrufe innerhalb derLabeledEntry
Klasse:sticky = W
für dieLabel
&sticky = E
für dieEntry
.Versuchen, diese und sehen, wenn es Ihr problem löst. Wenn Sie möchten, dass die Spalte zu nehmen weniger Platz einfach reduzieren
minsize
.InformationsquelleAutor maccartm