20

In Tkinter in Python: I have a table with a different label. How can I justify the text that is in the label? Because It is a table and the texts in different labels come together!

from tkinter import *
root=Tk()
a=Label(root,text='Hello World!')
a.pack()
a.place(x=200,y=200)
b=Label(root,text='Bye World')
b.pack()
b.place(x=200,y=100)

I want something for justifying in center some text in label but it is not something that I need plz check this: link

martineau
  • 119,623
  • 25
  • 170
  • 301
A.Elhami
  • 211
  • 1
  • 2
  • 5

3 Answers3

43

By default, the text in a label is centered. You can control this with the anchor attribute, and possibly with the justify attribute. justify only affects the text when there is more than one line of text in the widget.

For example, to get the text inside a label to be right-aligned you can use anchor="e" (which stands for "east"):

a=Label(root,text='Hello World!', anchor="e")

Note, however, this will appear to have no effect if the label is exactly big enough to hold the text. In your specific example, you would need to give each label the same width:

a=Label(..., width=12)
b=Label(..., width=12)
Bryan Oakley
  • 370,779
  • 53
  • 539
  • 685
  • 1
    for other anchor options: https://www.tutorialspoint.com/python/tk_anchors.htm – Allamanda Weitgereist Jan 05 '21 at 13:21
  • 1
    just to say, this whole East West terminology (e, w, se) is a tad pretentious and unnecessary. Would rather it was Top Left etc. Wish tkinter was more practical and intuitive in this respect. Just airing some griefs :) – Ovi Oprea Oct 15 '22 at 10:10
15

To add on to what Bryan said, LEFT is the constant you are looking for to correctly format your wrapped text. You can also justify to the RIGHT or CENTER (the default).

a=Label(root,text='Hello World!', anchor="e", justify=LEFT)
Vincent Wetzel
  • 269
  • 2
  • 4
10

instead of using .pack() i would use .grid()

The Tkinter Grid Geometry Manager

grid will allow better management of your components

find bellow an example of usage and management:

Label(root, text="First").grid(row=0, sticky=W)
Label(root, text="Second").grid(row=1, sticky=W)

entry1 = Entry(root)
entry2 = Entry(root)

entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

checkbutton.grid(columnspan=2, sticky=W)

image.grid(row=0, column=2, columnspan=2, rowspan=2,
           sticky=W+E+N+S, padx=5, pady=5)

button1.grid(row=2, column=2)
button2.grid(row=2, column=3)

you would endup using the grid option padx="x" to "justify" your labels

Alex Peters
  • 2,601
  • 1
  • 22
  • 29
glls
  • 2,325
  • 1
  • 22
  • 39
  • I want something for justifying in center some text in label but it is not something that I need plz check this : [link](http://s6.uplod.ir/i/00778/5p8kfr6qjgx3.png) – A.Elhami May 19 '16 at 09:39
  • as mentioned, using grid, and option padx="pixels", please review http://effbot.org/tkinterbook/grid.htm you will find what you need there – glls May 19 '16 at 09:41
  • 1
    re _"instead of using pack() I would use grid()"_ - they aren't using `pack`, they are using `place`. They _attempt_ to use `pack`, but when you call `place` immediately after it removes any effect that `pack` had. – Bryan Oakley May 19 '16 at 11:02
  • I think you meant `entry2 = Entry(root)` and not `entry1 = Entry(root)` 2 times in a row. – 12431234123412341234123 Mar 16 '21 at 15:41