2017-06-13 31 views
0

我试图创建一个票(模拟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的一个类似的输出到你的壳得到什么,如果你遇到这样的:

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) 

所以,如果你运行上面,那么这就是我的意思是当我说我想让一切看起来“中心化”。

我现在正在使用网格方法,因为它更容易将“注册”和“输入价格”标签与它们的值对齐。

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

+2

我还没有实际运行代码来验证这,但是你应该可以通过在中心标签中加入'columnspan = 2'(或者任何你使用的列的总数)来解决问题,并且从中删除'sticky ='选项(或者使用'sticky = W + E')。 – jasonharper

+0

是否有任何理由不只是使用一个'Text'小部件并将所有文本正确对齐?你想要一些行有两列,而其他行有一列?在那种情况下,他们必须指定一个'columnspan'。 –

+1

@ TadhgMcDonald-Jensen,不错,但使用Text小部件,用户可以用光标点击内容并编辑文本。我更喜欢标签,因为文本不能被编辑(这是我要买票的效果)。 –

回答

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) 
+0

谢谢 - 这是集中在一行中的行。然而,行与行中的标签之间仍然存在很大的横向差距,其中有两件事。删除粘性选项没有区别。有没有简单的方法来解决? –

+1

使得右侧的元素粘到西侧,而左侧的元素粘到东侧。 –

+0

太棒了,谢谢 –