如何使用网格使tkinter标签不符合列大小?

时间:2019-02-05 10:57:20

标签: python tkinter grid

我需要在包含标题的程序窗口顶部添加一个黑条,例如,请查看此网页的顶部-有一个标题,这基本上是我希望每个窗口使用的标题为我的tkinter程序。无论如何,我可以为我创建的每个新窗口设置默认值吗?还是我可以创建一种默认格式,该格式可以自动分配给每个窗口/页面?

我尝试使用标签像这样在屏幕上伸展

label1 = tkinter.Label(window, text="Title            ",bg="black",fg="white")
label1.grid(row=0,column=0)

我还尝试了其他方法,但是问题在于它调整了网格的列大小,这意味着我只能有一列小部件。

仅供参考,我14岁时仍在学习基础知识,因此我使用一种简单的方式使用tkinter。

这是我使用tkinter的基本方式示例,请耐心等待我哈哈。

#How i create main window.
window1 = tkinter.Tk()
#Insert window1 configurations(e.g, title, background, icon)

#How i create new windows
window2 = tkinter.TopLevel()
#Insert window2 configurations(e.g, title, background, icon)
window2.withdraw()

#How i open a new window
def openwindow():
    window1.withdraw
    window2.update
    window2.deiconify

现在我的问题在此代码内:

#New page
def SongPage():
    MainMenu.withdraw()
#Newpage
def OptionsPage():
    MainMenu.withdraw()



#MainMenu window.
MainMenu = tkinter.Tk()

MainMenu.geometry("200x150")

MainMenu.configure(background="grey")

MainMenu.title("Title")

#This is the header.(It has spaces to make it spread across screen)
MenuTitle = tkinter.Label(MainMenu, text="Header             ",bg="black", 
                         fg="white",font=("Times",20,"bold"))
#This is a small subheader.(It has spaces to make it spread across screen)
MenuSub = tkinter.Label(MainMenu, text="   Subheading                                          
                   ",bg="grey34", fg="white",font=("Times",10,"bold"))

#These "space" labels are to just space things out.
space3 = tkinter.Label(MainMenu, text="",bg="grey", fg="white",
                          font=("Times",20,"bold"))
space4 = tkinter.Label(MainMenu, text="",bg="grey", fg="white",
                          font=("Times",20,"bold"))

#These are the two buttons i'd like to be on screen under headers.
SongButton = tkinter.Button(MainMenu, text="Songs", bg="grey",fg="black",
                            font=("Times",12),command=SongPage)
OptionsButton = tkinter.Button(MainMenu, text="Options", bg="grey",fg="black",
                               font=("Times",12),command=OptionsPage)


#This is applying the widgets to the window.
MenuTitle.grid(row=0,column=0)
MenuSub.grid(row=1,column=0)
SongButton.grid(row=3,column=0)
OptionsButton.grid(row=3,column=1)

以下是其当前屏幕截图: https://pasteboard.co/HZKnIR9.png

这是我想要的样子: https://pasteboard.co/HZKo1Ru.png

1 个答案:

答案 0 :(得分:0)

您可以在对.grid()的调用中使用columnspan关键字参数。然后,您可以使用sticky关键字来确保它触及列的左右边缘。例如:

{{1}}

将使您的标签在第0列和第1列上延伸。如果窗口只有两列,则黑条将始终一直延伸。如果您有多于两列,则需要更大的列跨度。

Tkinter将首先通过使用其他窗口小部件的大小来计算所有列的宽度。如果黑条太大,需要更多空间,则TkInter将不得不拉伸其他列宽。但这可能不是必需的,黑条将一直很好地贯穿整个窗口,这就是您想要的。

在此处查看文档:{​​{3}}