tkinter pack() 方法不适用于一个标签
tkinter pack() method not working for one label
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
win.geometry('300x200')
lb1 = tk.Label(win,text='使用者帳號資料',font=('微軟正黑體',16),fg='yellow',bg='black')
lb1.pack(fill='x')
lb2 = tk.Label(win,text='帳號 : ABCDEF',height=4,width=26,font=('標楷體',14),bg='lightblue')
lb2.pack(side='left',anchor='nw',fill='x')
lb3 = tk.Label(win,text='注意',height=50,width=3,font=('微軟正黑體',12),bg='pink')
lb3.pack(anchor='se',fill='y',expand=True)
lb4 = tk.Label(win,text='密碼 : 123456',height=4,width=15,font=('標楷體',14),bg='lightgreen')
lb4.pack(anchor='sw',side='left')
win.mainloop()
即使我使用了 pack() 方法,变量 lb4
也无法在 tkinter window 上显示。我想将 lb4
小部件放在 lb2
下方,我尝试使用 anchor='sw'
仍然没有显示,所以有任何可能的方法可以正确显示该小部件吗?
我试过 运行 您的代码并在 lb3 之前使用 lb4 修复了问题,但它不会显示在 lb2 下面,因为您已经在 lb2 中使用了 side='left'
,所以它会获取整个左侧, 要将它打包到 lb2 下面,请删除 lb2 中的 side='left'
并将其放入 lb4.
它最初不显示 lb4,因为它在 TKinter 之外打包它 window。
而不是使用 .pack()
使用 .grid()
可以更好地将标签放在 window.
这个有效:
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
win.geometry('300x200')
lb1 = tk.Label(win,text='使用者帳號資料',font=('微軟正黑體',16),fg='yellow',bg='black')
lb1.pack(fill='x')
lb2 = tk.Label(win,text='帳號 : ABCDEF',height=4,width=26,font=('標楷體',14),bg='lightblue')
lb2.pack(anchor='nw',fill='x')
lb4 = tk.Label(win,text='密碼 : 123456',height=4,width=15,font=('標楷體',14),bg='lightgreen')
lb4.pack(side='left',anchor='sw')
lb3 = tk.Label(win,text='注意',height=50,width=3,font=('微軟正黑體',12),bg='pink')
lb3.pack(anchor='se',fill='y',expand=True)
win.mainloop()
打包方法正常工作,检查:
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
win.geometry('300x200')
# lb1 = tk.Label(win,text='使用者帳號資料',font=('微軟正黑體',16),fg='yellow',bg='black')
# lb1.pack(fill='x')
#
# lb2 = tk.Label(win,text='帳號 : ABCDEF',height=4,width=26,font=('標楷體',14),bg='lightblue')
# lb2.pack(side='left',anchor='nw',fill='x')
#
# lb3 = tk.Label(win,text='注意',height=50,width=3,font=('微軟正黑體',12),bg='pink')
# lb3.pack(anchor='se',fill='y',expand=True)
lb4 = tk.Label(win,text='密碼 : 123456',height=4,width=15,font=('標楷體',14),bg='lightgreen')
lb4.pack(anchor='sw',side='left')
win.mainloop()
如果它确实显示任何内容是因为 pack 方法将小部件添加到前一个的右侧,如果它锚定到“S”(outh),即使新的小部件它锚定到 'w' 并且支持至 'left'.
由于 lb3
锚定在 'se',任何其他小部件都显示在 windows 之外。
您应该使用 .grid 来正确设计您的 window:
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
lb1 = tk.Label(win, text='使用者帳號資料', font=('微軟正黑體', 16), fg='yellow',
bg='black')
lb1.grid(row=0, column=0, columnspan=3, sticky='WE')
lb2 = tk.Label(win, text='帳號 : ABCDEF', height=4, width=26, font=('標楷體', 14),
bg='lightblue')
lb2.grid(row=1, column=0, sticky='WE')
lb3 = tk.Label(win, text='注意', width=3, font=('微軟正黑體', 12), bg='pink')
lb3.grid(row=1, column=2, rowspan=2, sticky='NS')
#
lb4 = tk.Label(win, text='密碼 : 123456', height=4, width=15, font=('標楷體', 14),
bg='lightgreen')
lb4.grid(row=2, column=0, sticky='w')
win.mainloop()
看起来像这样:
在这里,我删除了 lb3 的高度,因为它不是必需的(粘性 'NS' 允许我们将小部件扩展到行跨度的顶部和底部)。
您可以根据需要更改列、行、列跨度、行跨度以创建所需的布局。
每次使用 pack
时,它都会为小部件分配一整面。因此,调用 pack
的顺序很重要。例如,一旦将小部件放在顶部,就不能再将某些东西放在右边。
当您将所有 pack
语句针对同一父小部件中的所有子项分组在一起时,这通常更容易形象化。我还建议始终明确定义 side
参数,以便您的意图 crystal 清楚。
这是使用 pack 使 lb4
低于 lb2
的正确顺序,lb1
位于顶部,lb3
位于右侧:
lb1.pack(side="top", fill='x')
lb3.pack(side="right", fill='y')
lb2.pack(side="top", fill='x')
lb4.pack(side="top", fill='x')
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
win.geometry('300x200')
lb1 = tk.Label(win,text='使用者帳號資料',font=('微軟正黑體',16),fg='yellow',bg='black')
lb1.pack(fill='x')
lb2 = tk.Label(win,text='帳號 : ABCDEF',height=4,width=26,font=('標楷體',14),bg='lightblue')
lb2.pack(side='left',anchor='nw',fill='x')
lb3 = tk.Label(win,text='注意',height=50,width=3,font=('微軟正黑體',12),bg='pink')
lb3.pack(anchor='se',fill='y',expand=True)
lb4 = tk.Label(win,text='密碼 : 123456',height=4,width=15,font=('標楷體',14),bg='lightgreen')
lb4.pack(anchor='sw',side='left')
win.mainloop()
即使我使用了 pack() 方法,变量 lb4
也无法在 tkinter window 上显示。我想将 lb4
小部件放在 lb2
下方,我尝试使用 anchor='sw'
仍然没有显示,所以有任何可能的方法可以正确显示该小部件吗?
我试过 运行 您的代码并在 lb3 之前使用 lb4 修复了问题,但它不会显示在 lb2 下面,因为您已经在 lb2 中使用了 side='left'
,所以它会获取整个左侧, 要将它打包到 lb2 下面,请删除 lb2 中的 side='left'
并将其放入 lb4.
它最初不显示 lb4,因为它在 TKinter 之外打包它 window。
而不是使用 .pack()
使用 .grid()
可以更好地将标签放在 window.
这个有效:
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
win.geometry('300x200')
lb1 = tk.Label(win,text='使用者帳號資料',font=('微軟正黑體',16),fg='yellow',bg='black')
lb1.pack(fill='x')
lb2 = tk.Label(win,text='帳號 : ABCDEF',height=4,width=26,font=('標楷體',14),bg='lightblue')
lb2.pack(anchor='nw',fill='x')
lb4 = tk.Label(win,text='密碼 : 123456',height=4,width=15,font=('標楷體',14),bg='lightgreen')
lb4.pack(side='left',anchor='sw')
lb3 = tk.Label(win,text='注意',height=50,width=3,font=('微軟正黑體',12),bg='pink')
lb3.pack(anchor='se',fill='y',expand=True)
win.mainloop()
打包方法正常工作,检查:
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
win.geometry('300x200')
# lb1 = tk.Label(win,text='使用者帳號資料',font=('微軟正黑體',16),fg='yellow',bg='black')
# lb1.pack(fill='x')
#
# lb2 = tk.Label(win,text='帳號 : ABCDEF',height=4,width=26,font=('標楷體',14),bg='lightblue')
# lb2.pack(side='left',anchor='nw',fill='x')
#
# lb3 = tk.Label(win,text='注意',height=50,width=3,font=('微軟正黑體',12),bg='pink')
# lb3.pack(anchor='se',fill='y',expand=True)
lb4 = tk.Label(win,text='密碼 : 123456',height=4,width=15,font=('標楷體',14),bg='lightgreen')
lb4.pack(anchor='sw',side='left')
win.mainloop()
如果它确实显示任何内容是因为 pack 方法将小部件添加到前一个的右侧,如果它锚定到“S”(outh),即使新的小部件它锚定到 'w' 并且支持至 'left'.
由于 lb3
锚定在 'se',任何其他小部件都显示在 windows 之外。
您应该使用 .grid 来正确设计您的 window:
import tkinter as tk
win = tk.Tk()
win.title('使用者登入')
lb1 = tk.Label(win, text='使用者帳號資料', font=('微軟正黑體', 16), fg='yellow',
bg='black')
lb1.grid(row=0, column=0, columnspan=3, sticky='WE')
lb2 = tk.Label(win, text='帳號 : ABCDEF', height=4, width=26, font=('標楷體', 14),
bg='lightblue')
lb2.grid(row=1, column=0, sticky='WE')
lb3 = tk.Label(win, text='注意', width=3, font=('微軟正黑體', 12), bg='pink')
lb3.grid(row=1, column=2, rowspan=2, sticky='NS')
#
lb4 = tk.Label(win, text='密碼 : 123456', height=4, width=15, font=('標楷體', 14),
bg='lightgreen')
lb4.grid(row=2, column=0, sticky='w')
win.mainloop()
看起来像这样:
在这里,我删除了 lb3 的高度,因为它不是必需的(粘性 'NS' 允许我们将小部件扩展到行跨度的顶部和底部)。 您可以根据需要更改列、行、列跨度、行跨度以创建所需的布局。
每次使用 pack
时,它都会为小部件分配一整面。因此,调用 pack
的顺序很重要。例如,一旦将小部件放在顶部,就不能再将某些东西放在右边。
当您将所有 pack
语句针对同一父小部件中的所有子项分组在一起时,这通常更容易形象化。我还建议始终明确定义 side
参数,以便您的意图 crystal 清楚。
这是使用 pack 使 lb4
低于 lb2
的正确顺序,lb1
位于顶部,lb3
位于右侧:
lb1.pack(side="top", fill='x')
lb3.pack(side="right", fill='y')
lb2.pack(side="top", fill='x')
lb4.pack(side="top", fill='x')