Виджет метки положения внутри рамки

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

 

страница руководства по сетке


Установите размер пустых строк и столбцов в примере tkinter сетки