首页 > 解决方案 > tkinter LabelFrame 中心文本

问题描述

我正在尝试使用 LabelFrame 函数在框架中居中文本。我的代码如下。

import tkinter as tk

window = tk.Tk()

for i in range(9):
    for j in range(9):
        frame = tk.LabelFrame(
            master=window,
            relief=tk.RAISED,
            borderwidth=5,
            width=50,
            height=50,
            text=i+j,
            labelanchor = 'n'
        )
        frame.grid(row=i, column=j)
window.geometry("500x500")
window.mainloop()

指定位置的参数labelanchor仅给出框架边缘的选项。有没有简单的方法使用LabelFrame在框架内居中文本?

标签: pythontkinter

解决方案


有没有任何简单的方法可以使用 LabelFrame 在框架内居中文本?

labelframe 的文本只能出现在框架的边缘。如果您希望文本出现在框架内,您必须创建一个Label并将其添加到框架中。

使用框架和标签

如果您希望将其他小部件放入框架中并且不希望此文本干扰其他小部件,这是使用place.

以下示例添加标签“Hello, world”以显示在小部件的中心。一个按钮被放置在框架中只是为了表明它的位置不受标签的影响,反之亦然。屏幕截图显示了框架的自然外观以及调整窗口大小时的样子。

import tkinter as tk

root = tk.Tk()

lf = tk.Frame(root, bd=2, relief="groove")
lf_label = tk.Label(lf, text="Hello, world")
lf_label.place(relx=.5, rely=.5, anchor="c")
lf.pack(padx=20, pady=20, fill="both", expand=True)

b = tk.Button(lf, text="Click me")
b.pack(padx=10, pady=10)

root.mainloop()

原始窗口截图 调整大小的窗口的屏幕截图

仅使用标签

您可以在任何其他小部件中添加小部件。因此,您可以只使用标签而不是框架。默认情况下,文本将居中,就像前面的示例一样,它不会影响其他小部件的布局。

我没有包含屏幕截图,因为结果与前面的示例相同。

import tkinter as tk

root = tk.Tk()

lf = tk.Label(text="Hello, world", bd=2, relief="groove")
lf.pack(padx=20, pady=20, fill="both", expand=True)

b = tk.Button(lf, text="Click me")
b.grid(row=0, column=0)

root.mainloop()

推荐阅读