Я использую python tkinter для создания ui, содержащего фигуру matplotlib и некоторые кнопки, но мне трудно изменить размер окна и его содержимое. Я рассмотрел некоторые примеры на этом сайте и в документах, и, насколько я понимаю, для кадра, содержащего более мелкие кадры для изменения размера, все они должны быть настроены индивидуально. Каждый получает вес, применяемый к нему, чтобы определить, сколько из доступного пространства он получает (это правильно?). Однако, когда я пытаюсь применить это, как показано ниже, ни один из кадров не изменяет размер. Кроме того, если значение wiegth равно нулю для конфигурации столбца, а 1 для строки configure означает, что оно будет изменять только в одном направлении?Изменение размеров окон и содержимого tkinter
import Tkinter
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class Application():
def __init__(self, master):
frame2 = Tkinter.Frame(master, height=510, width=770, bg='red')
frame2.grid(row=0, column=0, sticky='nsew')
frame2.columnconfigure(0, weight=1)
frame2.rowconfigure(0, weight=1)
frame2a = Tkinter.Frame(frame2, height=80, width=770, bg='blue')
frame2a.grid(row=0, column=0, sticky='nsew')
frame2a.columnconfigure(0, weight=1)
frame2a.rowconfigure(0, weight=1)
frame2b = Tkinter.Frame(frame2, height=410, width=770, bg='green')
frame2b.grid(row=1, column= 0, sticky='nsew')
frame2b.columnconfigure(0, weight=1)
frame2b.rowconfigure(1, weight=1)
# add plot
fig = Figure(figsize=(9.5,5.2), facecolor='white')
fig.add_subplot(111)
canvas = FigureCanvasTkAgg(fig, master=frame2b)
canvas.show()
canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
if __name__ == '__main__' :
root = Tkinter.Tk()
root.geometry("770x510")
app = Application(root)
root.mainloop()
Я бы добавил: если вы смешиваете и сопоставляете '.pack() 'и' .grid() ', и размещаете виджеты с сеткой _inside_ упакованный виджет, вы должны применять' .columnconfigure' и '.rowconfigure' к этому упакованному виджета тоже. В противном случае упакованный виджет не будет динамически изменять размер для дочерних элементов (привязанных к сетке). Для меня это было неинтересно, поскольку я изначально считал, что упакованные объекты не могут использовать методы «.columnconfigure» и '.rowconfigure' (поскольку они обычно используются для сетчатых элементов). – anonnoir