首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter ()方法不适用于一个标签

tkinter ()方法不适用于一个标签
EN

Stack Overflow用户
提问于 2021-12-24 08:14:00
回答 3查看 813关注 0票数 1
代码语言:javascript
复制
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',但是仍然没有显示,所以有什么可能的方法来正确地显示这个小部件吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-24 08:57:14

pack方法工作正常,请检查:

代码语言:javascript
复制
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正确地设计您的窗口:

代码语言:javascript
复制
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‘允许我们将小部件扩展到行跨度的上下)。您可以根据需要更改列、行、列跨度、行跨度。

票数 2
EN

Stack Overflow用户

发布于 2021-12-24 16:14:04

每次使用pack时,它都会为小部件分配整个侧。因此,您调用pack的顺序很重要。例如,一旦你把小部件放在顶部,你就不能再往右放东西了。

当您将所有pack语句组合在同一个父部件中的所有子部件上时,这通常要容易得多。我还建议始终显式地定义side参数,以便您的意图非常清楚。

这是使用pack使lb4低于lb2的正确顺序,lb1位于顶部,lb3位于右侧:

代码语言:javascript
复制
lb1.pack(side="top", fill='x')
lb3.pack(side="right", fill='y')
lb2.pack(side="top", fill='x')
lb4.pack(side="top", fill='x')

票数 1
EN

Stack Overflow用户

发布于 2021-12-24 08:57:04

在lb4修复问题之前,我试着运行您的代码并使用lb3,但是它不会显示在lb2下面,因为您已经在lb2中使用了side='left',因此它获得了整个左侧,将其打包到lb2下面,删除lb2中的side='left'并将其放入lb4中。

它一开始不显示lb4,因为它将它打包在TKinter窗口之外。

不要使用.pack(),而是使用.grid()来更好地将标签放置在窗口中。

这样做是可行的:

代码语言:javascript
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70470845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档