#python-3.x #tkinter
Вопрос:
Как уже упоминалось в названии темы, я пытаюсь разместить виджет метки внутри рамки с помощью метода grid() и его аргументов координат «строка»/»столбец». Настройка этих аргументов просто не работает, так как виджет «Моя метка» остается в верхней части кадра. Я хотел бы разместить метку в удобном для меня месте внутри master_frame, используя только grid().
Код :
import tkinter as tk
class myForm:
def __init__(self, master_window):
master_window.geometry('800x800')
master_window.title("My App")
master_frame = tk.Frame(master=master_window, bg="blue")
master_frame.grid(row=0, column=0, sticky=(tk.N, tk.S, tk.W, tk.E))
master_window.columnconfigure(0, weight=1)
master_window.rowconfigure(0, weight=1)
MetadataTitle = tk.Label(master=master_frame, text="1) Enter metadata :", font(None, 16))
MetadataTitle.grid(row=3, column=3) # test coordinates
##
root = tk.Tk()
myform = myForm(root)
root.mainloop()
Я совершенно новичок в tkinter и, вероятно, не до конца понимаю все его концепции. Не нашел эквивалентной темы.
Заранее спасибо за ваши ответы
Комментарии:
1. Где вы ожидаете его разместить? Пустые строки и столбцы по умолчанию не занимают места.
2. Поскольку в строках и столбцах перед меткой нет другого виджета, размер всех этих строк и столбцов равен нулю. Поэтому этикетка всегда ставится в левом верхнем углу.
Ответ №1:
Установите размер пустых строк и столбцов в сетке
Вы можете разместить виджет внутри рамки, используя just grid()
.
import tkinter as tk
class myForm:
def __init__(self, master_window):
master_window.geometry('600x600')
master_window.title("My App")
master_window.columnconfigure(0, weight=1)
master_window.rowconfigure(0, weight=1)
master_frame = tk.Frame(master=master_window, bg="blue")
master_frame.grid(row=0, column=0, sticky=(tk.N, tk.S, tk.W, tk.E))
# set the number of rows and columns
# minimum size, in screen units (px)
master_frame.columnconfigure((0, 1, 2, 3, 4, 5), weight=1, minsize=30) # choose appropriate size
master_frame.rowconfigure((0, 1, 2, 3, 4, 5, 6), weight=1, minsize=30) # here minsize is optional
# another option is to add blank labels to the row and set their width (in characters)
# you can fill in all empty cells
# row 3
label_3_3 = tk.Label(master_frame, text="1) Enter metadata :", font=(None, 16))
label_3_3.grid(row=3, column=3, padx=5, pady=5)
entry_3_4 = tk.Entry(master_frame)
entry_3_4.grid(row=3, column=4, padx=5, pady=5)
root = tk.Tk()
myform = myForm(root)
root.update_idletasks()
# if the content of the window is greater than root.geometry()
root.minsize(width=root.winfo_reqwidth(), height=root.winfo_reqheight())
# check width and height
print(root.winfo_geometry())
print(root.winfo_width(), root.winfo_height())
print(root.winfo_reqwidth(), root.winfo_reqheight())
print(root.winfo_screenwidth(), root.winfo_screenheight())
root.mainloop()