如何使用tkinter网格方法居中所有文本?

时间:2017-06-13 17:37:13

标签: python-3.x tkinter

我试图创建一张票(在tkinter中),模仿您从售票机收到的票,如果您刚刚付款进入达勒姆花园。一行一行,它应该有一条欢迎信息,然后是条目的价格,然后是注册,最后是再见信息。

我遇到的问题是让所有小部件(标签都是中心)居住,以使票证看起来非常令人愉悦。

到目前为止,注册'并且它的相应值是水平对齐的,因为条目的价格是'及其相应的价值。这些东西一个在另一个上面。但是,我找不到维持后者的方法,同时仍然保持欢迎信息和中心的再见信息。

所以目前,欢迎和再见的信息与其他价值观相距甚远,尽管进入价格'和'注册'水平匹配它们的值,它们之间有很大的差距,我还没有找到摆脱它的方法。

from tkinter import *

TicketPrice = 25    # for the labelPrice below
WrittenPrice = "£ " + str(TicketPrice)
reg = "SMI" # for the labelREG below


root = Tk()
root.title("Your Ticket")
root.geometry("300x150")

labelWelcome = Label(root, text="The Durham Gardens")
labelBye = Label(root, text="Thank you for visiting. Enjoy!") 

labelPrice = Label(root, text="Price of Entry") # no frame
labelREG = Label(root, text="Registration")
ActualPrice = Label(root, text=WrittenPrice) # get ticekt price
ActualREG = Label(root, text=str(reg)) 

root.grid_rowconfigure(0, minsize=20)
root.grid_rowconfigure(2, minsize=20) 
root.grid_rowconfigure(6, minsize=20) 
root.grid_columnconfigure(0, minsize=100) 



labelPrice.grid(row=3, sticky=E) 
labelREG.grid(row=5, sticky=E) 

ActualPrice.grid(row=3, column=1)
ActualREG.grid(row=5, column=1)  


labelWelcome.grid(row=1, column=1, ipadx=50, sticky=E) # column
labelBye.grid(row=7, column=1, ipadx=50, sticky=E) 

root.mainloop() 

我基本上试图在tkinter上实现类似的输出,如果你运行它,你会在shell中获得:

print("*"*40)
print("*".ljust(39) + "*")
print("*".ljust(10) + "The Durham Gardens" + "*".rjust(12))
print("*".ljust(9) + "Price of Entry: £" + ) + "*".rjust(12))
print("*".ljust(15) + "REG: " + str(reg) + "*".rjust(17))
print("*".ljust(39) + "*")
print("*".ljust(5) + "Thank you for visiting. Enjoy!" + "*".rjust(5))
print("*".ljust(39) + "*")
print("*"*40)

因此,如果你运行上述内容,那么当我说我希望所有内容都看起来都是中心时,这就是我的意思。

我目前正在使用网格方法,因为更容易对齐“注册”方式。和'进入价格'标签及其价值。

所有小部件都是标签,仅包含文字。有没有办法把所有东西放在中心?

1 个答案:

答案 0 :(得分:1)

正如@jasonharper所说,只有一个东西的行需要指定columnspan=2来跨越两列(并从列= 0开始)

labelWelcome.grid(row=1, column=0, columnspan=2, ipadx=50) # column
labelBye.grid(row=7, column=0,columnspan=2, ipadx=50)