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