Имам рамка, чийто размер фиксирах с помощта на метода grid_propagate(). Бих искал да центрирам рамка в тази рамка. Как да направя това?
Как да центрирам рамка в рамка в Tkinter?
Отговори (2)
опаковайте го, за да запълните във всички посоки. Добавете подложка, ако е необходимо.
Или използвайте място, което ви позволява да използвате относително или абсолютно позициониране. Можете да използвате относително x/y от .5/.5 и котва от "c" (център).
import Tkinter as tk
root=tk.Tk()
f1 = tk.Frame(width=200, height=200, background="red")
f2 = tk.Frame(width=100, height=100, background="blue")
f1.pack(fill="both", expand=True, padx=20, pady=20)
f2.place(in_=f1, anchor="c", relx=.5, rely=.5)
root.mainloop()
f1
се управлява от основния прозорец, а f2
се управлява от f1
(заради параметъра in_
.
- person Bryan Oakley; 29.09.2015
place()
е добре, когато вече трябва да наложите размера на външната рамка. Но обикновено избягвам place()
, защото рамката не усеща размера на placed
приспособления при автоматично оразмеряване. Моля, вижте отговора ми по-долу.
- person Gary02127; 05.02.2020
Ако искате да центрирате джаджа (като рамка) вътре в рамка, най-лесният начин да го направите е чрез .grid()
. Ако използвате .pack()
, в крайна сметка ще останете по един от ръбовете, тъй като pack()
има ключовата дума side
.
Ако използвате .place()
, тогава сте заседнали при налагането на размера на външната рамка (което обикновено не трябва да правите, но вече сте го направили, така че не е проблем), защото placed
приспособленията не се откриват когато рамката се оразмерява автоматично като при packed
или gridded
джаджи. Не знам защо, но това е положението.
Така че, като цяло, най-добрият начин да центрирате изпълним елемент вътре в рамка е да grid
изпълнимия елемент в рамката. (Опцията sticky
по подразбиране е ЦЕНТЪР.) И след това, ако искате да можете да преоразмерите външната рамка и джаджата да остане центрирана, трябва да позволите на клетката на външната рамка да се разширява/растат. Бихте направили това чрез командите .grid_rowconfigure()
etc. И така, пример може да бъде:
widget = Widget(frame, ...)
widget.grid(row=0, column=0, sticky="")
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)