Unter Berufung auf Schriftarten ist eine schlechte Praxis wäre durch die Umstellung auf eine monospace
Schriftart wie consolas
import tkFont
my_font = tkFont.Font(family='Consolas', size=15, weight='bold')
# then plug in the font to your widget ...
so im Code festgelegt werden; Wie erwähnt, es funktioniert nur mit Monospaces Schriftarten, aber tun Sie wirklich wollen Monospaces Schriftarten in Ihrer gesamten Anwendung verwenden nur für die Ausrichtung? Ich weiß nicht. Und was, wenn Sie später einen Label
zu einem Input
oder etwas anderem ändern möchten? Müssen wir jetzt neue Label
s nur zur Ausrichtung hinzufügen?
Also während der Wechsel zu einer monospaced Schriftart "funktioniert", wäre ein (viel) besser Weg, die Werkzeuge zu verwenden, die Tk uns zur Verfügung stellt.
Zum Beispiel können Sie die Label()
in der ersten Spalte auf eine feste Breite eingestellt:
import tkinter
# Just some random strings of different sizes from my dictionary
names = ['Algol', 'American', 'Americanises', 'Americanising', 'Americanism',
'Argentine', 'Argentinian', 'Ariz', 'Arizona', 'Armstrong']
root = tkinter.Tk()
tkinter.Label(root, text='Lists:', anchor=tkinter.W).grid(row=0, column=0, sticky=tkinter.W)
for i in range(0, 10):
label_id = tkinter.Label(root, width=30, anchor=tkinter.W, text='Sector %s' % i)
label_name = tkinter.Label(root, anchor=tkinter.W, text=names[i])
label_id.grid(row=i+1, column=0, sticky=tkinter.W)
label_name.grid(row=i+1, column=1, sticky=tkinter.W)
root.mainloop()
Es gibt mehr Möglichkeiten, dies zu tun, aber. Zum Beispiel durch eine Breite mit columnconfigure
Einstellung:
import tkinter
# Just some random strings of different sizes from my dictionary
names = ['Algol', 'American', 'Americanises', 'Americanising', 'Americanism',
'Argentine', 'Argentinian', 'Ariz', 'Arizona', 'Armstrong']
root = tkinter.Tk()
root.columnconfigure(0, minsize=150)
tkinter.Label(root, text='Lists:', anchor=tkinter.W).grid(row=0, column=0, sticky=tkinter.W)
for i in range(0, 10):
label_id = tkinter.Label(root, anchor=tkinter.W, text='Sector %s' % i)
label_name = tkinter.Label(root, anchor=tkinter.W, text=names[i])
label_id.grid(row=i+1, column=0, sticky=tkinter.W)
label_name.grid(row=i+1, column=1, sticky=tkinter.W)
root.mainloop()
Der Vorteil columnconfigure()
besteht darin, dass die minimale Breite des Spalts Inhalts unabhängig ist. Also, wenn Sie die Label()
zu etwas später ändern, sollte das Layout noch funktionieren, und es ist wahrscheinlich ein wenig offensichtlicher, dass Sie explizit eine Breite für diese Spalte festlegen möchten.
Dies ist ein Problem mit nicht-Längeneinheit Schriftart . Nicht mit dem Code selbst – AlanSTACK
Danke @Alan. Haben Sie eine Idee, wie Sie das Schriftartenproblem lösen können, wie es in der Einheitslänge gemacht wird? – Hilal
Ich habe eine ausführlichere Antwort unten zur Verfügung gestellt, wie man es macht. – AlanSTACK