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()

变量lb4不能显示在tkinter窗口上,即使我使用了pack()方法。我想把lb4小部件放在lb2下面,我尝试过使用anchor='sw',但是仍然没有显示,所以有什么可能的方法来正确地显示这个小部件吗?
发布于 2021-12-24 08:57:14
pack方法工作正常,请检查:
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方法将小部件添加到前面的on的右边,如果它锚定到“S”(茅斯),即使新的小部件锚定在'w‘,边放在’左侧‘。
因为lb3是“se”的锚,所以任何其他小部件都会显示在窗口之外。
您应该使用.grid正确地设计您的窗口:
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‘允许我们将小部件扩展到行跨度的上下)。您可以根据需要更改列、行、列跨度、行跨度。
发布于 2021-12-24 16:14:04
每次使用pack时,它都会为小部件分配整个侧。因此,您调用pack的顺序很重要。例如,一旦你把小部件放在顶部,你就不能再往右放东西了。
当您将所有pack语句组合在同一个父部件中的所有子部件上时,这通常要容易得多。我还建议始终显式地定义side参数,以便您的意图非常清楚。
这是使用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')

发布于 2021-12-24 08:57:04
在lb4修复问题之前,我试着运行您的代码并使用lb3,但是它不会显示在lb2下面,因为您已经在lb2中使用了side='left',因此它获得了整个左侧,将其打包到lb2下面,删除lb2中的side='left'并将其放入lb4中。
它一开始不显示lb4,因为它将它打包在TKinter窗口之外。
不要使用.pack(),而是使用.grid()来更好地将标签放置在窗口中。
这样做是可行的:
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()

https://stackoverflow.com/questions/70470845
复制相似问题