我试图创建一张票(在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)
因此,如果你运行上述内容,那么当我说我希望所有内容都看起来都是中心时,这就是我的意思。
我目前正在使用网格方法,因为更容易对齐“注册”方式。和'进入价格'标签及其价值。
所有小部件都是标签,仅包含文字。有没有办法把所有东西放在中心?
答案 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)