текст в центре рамки метки tkinter

#python #tkinter

Вопрос:

Я пытаюсь центрировать текст во фрейме, используя функцию 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?

Комментарии:

1. Почему бы вам просто не использовать Label с границей вместо LabelFrame этого ?

2. Это моя первая программа с tkinter, и я нашел функцию LabelFrame. Я видел, как люди использовали ярлык для центрирования, но мне было интересно, возможно ли это также с помощью LabelFrame.

Ответ №1:

Есть ли какой-нибудь простой способ центрировать текст внутри рамки с помощью LabelFrame?

Текст рамки метки может отображаться только по краям рамки. Если вы хотите, чтобы текст отображался внутри рамки, вы должны создать Label и добавить его в рамку.

Использование рамки и метки

Если вы хотите поместить в рамку другие виджеты и не хотите, чтобы этот текст мешал другим виджетам, это прекрасная возможность для использования place .

В следующем примере в центре виджета появляется надпись «Привет, мир». Кнопка помещается в рамку только для того, чтобы показать, что на ее размещение не влияет надпись, или наоборот. На скриншотах показано, как естественно выглядит рамка и когда изменяется размер окна.

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