【问题标题】:Tkinter: Center label in frame of fixed size?Tkinter:固定大小的框架中的中心标签?
【发布时间】:2015-09-15 09:41:52
【问题描述】:

我正在尝试创建一个固定大小的框架并在中心放置一个文本标签。我不确定为什么这不起作用。我想要主框架左上角的框架,所以指定了 NW 并且工作正常。但是改变标签的粘性方向并没有做任何事情。感谢您的帮助。

self.f = Frame(self.master,bg="yellow",width=50,height=50)
self.f.grid(row=0,column=0,sticky="NW")
self.f.grid_propagate(0)
self.f.update()
self.l = Label(self.f,text="123",anchor="center",bg="yellow")
self.l.grid(column=0,row=0,sticky="wens")

【问题讨论】:

  • 在 Tkinter 中排列小部件是一项棘手的任务。快速修复是将padypadx 添加到标签网格:self.l.grid(column=0,row=0, pady=10, padx=10, sticky="wens")
  • W+E+N+S != "wens"和@VRage的技巧

标签: python tkinter


【解决方案1】:

您可以使用.place() 作为标签,因为您的框架和标签有不同的父级。在place() 中,您可以使用anchor="center" 指定“锚点”的起点:xy。这是一个工作示例:

app = Tk()
f = Frame(app,bg="yellow",width=50,height=50)
f.grid(row=0,column=0,sticky="NW")
f.grid_propagate(0)
f.update()
l = Label(f,text="123",bg="yellow")
l.place(x=25, y=25, anchor="center")
app.mainloop()

【讨论】:

  • 谢谢。这很好用。我认为在同一个窗口中使用 pack 和 grid 应该是不好的。还是仅仅指那些有相同父母的人?
  • 它只是指具有相同父级的小部件。因此,您可以在其中一个中有 2 个不同的框架,您可以在另一个框架中使用 grid(),您可以在另一个框架中使用 pack()
  • 如果您不想自己输入 Frame 的中间值,您也可以使用:l.place(x=f.winfo_width()/2, y=f.winfo_height()/2, anchor="center"),它只使用框架的宽度和高度
  • @VRage:你不需要place 的所有数学——你可以使用相对坐标(即:l.place(relx=.5, rely=.5)
  • 您的答案文本建议使用pack,但您的代码示例使用place。这有点令人困惑。
猜你喜欢
  • 1970-01-01
  • 2017-01-27
  • 2021-11-13
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多