如何使 Tkinter 中的标签只为空 space 而不是整个 window
How to make a Label in Tkinter get only empty space and not the whole window
我有一个Tkinter应用程序,我想让Label完全占满空白space(因为我已经将Label设置为我的App的背景图片)。但是当我没有指定标签的高度和宽度时,它也会像下面的代码一样吃掉框架。如何让它在框架下方,但占据空 space???
代码 -->
#importing everything
from tkinter import *
from pypresence import Presence
import time
#making the root window
root = Tk()
dimension = '800x500'
#setting the window
bg = PhotoImage(file = r'C:\Users\Hunter\Desktop\school 1\module\pbm\bg.png')
window = Label(root, bd=0, image=bg)
window.pack(fill=BOTH, expand=True, side=BOTTOM)
#overriding the default properties
root.overrideredirect(True)
root.geometry(dimension)
#the main title bar
title_bar = Frame(root, bg='#496E82', bd=0, height=4)
#pack all the widgets
title_bar.pack(fill=X, side=TOP)
#code for moving the window
def get_pos(event):
xwin = root.winfo_x()
ywin = root.winfo_y()
startx = event.x_root
starty = event.y_root
ywin = ywin - starty
xwin = xwin - startx
def move_window(event):
root.geometry(dimension + '+{0}+{1}'.format(event.x_root + xwin, event.y_root + ywin))
startx = event.x_root
starty = event.y_root
title_bar.bind('<B1-Motion>', move_window)
#binding the title bar so that it moves
title_bar.bind('<Button-1>', get_pos)
#main thing
root.mainloop()
您可以在标签上使用place()
代替pack()
来填充可用的space:
# As the height of the title bar is 4
# so the label height should be <window height> - 4: relheight=1, height=-4
window.place(x=0, y=4, relwidth=1, relheight=1, height=-4)
如果您将其用作背景图片,最好使用 place
。当您使用 place
时,它不会影响 window 或任何其他小部件的几何形状(即:您不必调用 overrideredirect
)。
place
允许您以百分比形式指定相对宽度和高度(其中 1
表示宽度或高度的 100%),因此您可以将其始终设置为宽度和window.
的高度
例如,这会将 window 放在左上角并强制标签与 window 一样高和宽:
window.place(x=0, y=0, relwidth=1.0, relheight=1.0)
如果您希望标签居中,您可以将相对的 x 和 y 坐标设置为 .5(例如:宽度或高度的 50%)
window.place(relx=.5, rely=.5, anchor="center")
我有一个Tkinter应用程序,我想让Label完全占满空白space(因为我已经将Label设置为我的App的背景图片)。但是当我没有指定标签的高度和宽度时,它也会像下面的代码一样吃掉框架。如何让它在框架下方,但占据空 space???
代码 -->
#importing everything
from tkinter import *
from pypresence import Presence
import time
#making the root window
root = Tk()
dimension = '800x500'
#setting the window
bg = PhotoImage(file = r'C:\Users\Hunter\Desktop\school 1\module\pbm\bg.png')
window = Label(root, bd=0, image=bg)
window.pack(fill=BOTH, expand=True, side=BOTTOM)
#overriding the default properties
root.overrideredirect(True)
root.geometry(dimension)
#the main title bar
title_bar = Frame(root, bg='#496E82', bd=0, height=4)
#pack all the widgets
title_bar.pack(fill=X, side=TOP)
#code for moving the window
def get_pos(event):
xwin = root.winfo_x()
ywin = root.winfo_y()
startx = event.x_root
starty = event.y_root
ywin = ywin - starty
xwin = xwin - startx
def move_window(event):
root.geometry(dimension + '+{0}+{1}'.format(event.x_root + xwin, event.y_root + ywin))
startx = event.x_root
starty = event.y_root
title_bar.bind('<B1-Motion>', move_window)
#binding the title bar so that it moves
title_bar.bind('<Button-1>', get_pos)
#main thing
root.mainloop()
您可以在标签上使用place()
代替pack()
来填充可用的space:
# As the height of the title bar is 4
# so the label height should be <window height> - 4: relheight=1, height=-4
window.place(x=0, y=4, relwidth=1, relheight=1, height=-4)
如果您将其用作背景图片,最好使用 place
。当您使用 place
时,它不会影响 window 或任何其他小部件的几何形状(即:您不必调用 overrideredirect
)。
place
允许您以百分比形式指定相对宽度和高度(其中 1
表示宽度或高度的 100%),因此您可以将其始终设置为宽度和window.
例如,这会将 window 放在左上角并强制标签与 window 一样高和宽:
window.place(x=0, y=0, relwidth=1.0, relheight=1.0)
如果您希望标签居中,您可以将相对的 x 和 y 坐标设置为 .5(例如:宽度或高度的 50%)
window.place(relx=.5, rely=.5, anchor="center")