У вас нет других виджет, поэтому вам сложно знать, где вы хотите, чтобы увидеть другие виджеты. Вот что я могу сказать вам: сделав dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
, вы просите Tkinter заполнить экран сюжетом. Это, потому что вы просите его заполнить все направления (fill=BOTH
) и развернуть, чтобы заполнить любое дополнительное пространство (expand=1
).
Тем не менее, вы можете добавить другие виджеты. pack
работает путем размещения виджетов на одной стороне контейнера. Ваш контейнер, master
, всегда имеет четыре стороны. Так, например, если вы хотите создать панель инструментов, вы могли бы сделать что-то вроде:
toolbar = tk.Frame(master)
button = tk.Button(toolbar, text="Push me")
button.pack(side="left") # left side of parent, the toolbar frame
toolbar.pack(side=TOP, fill="x") # top of parent, the master window
Обратите внимание, что если вы поместите этот код после код, в котором вы pack
сюжет, панель показывает на дне ! Это потому, что TOP
, BOTTOM
и т. Д. Относятся к пробелу, оставленному другими виджетами, которые уже были pack
ред. Сюжет занимает верх, оставшееся пространство находится внизу. Поэтому, когда вы укажете TOP
, это означает «в верхней части области ниже того, что уже находится наверху».
Итак, у вас есть выбор. Лучший выбор - сделать ваши виджеты в том порядке, в котором вы хотите, чтобы они появились. Если вы pack
панель инструментов наверху перед вами pack
сюжет, это будет панель инструментов, которая отображается на самом верху. Кроме того, вы можете разместить график внизу, а не сверху, и это также решит проблему.
Кстати, я обычно создаю свои виджеты в одном блоке, а затем выкладываю их в отдельный блок. Я нахожу, что код упрощает его работу.
Другой вариант, который может соответствовать вашей мысленной модели лучше, чтобы grid
вместоpack
. С помощью grid
вы можете выбрать строки и столбцы (столбцы), которые занимает виджет. Это упрощает прокладку вещей в сетке, но за счет использования небольшого количества кода.
Например, поставить панель инструментов в верхней части и сюжет внизу вы можете сделать:
toolbar.grid(row=1, column=1, sticky="ew")
dataPlot.get_tk_widget().grid(row=1, column=1, sticky="nsew")
master.grid_rowconfigure(0, weight=0)
master.grid_rowconfigure(1, weight=1)
master.grid_columnconfigure(0, weight=1)
Обратите внимание, что строки и столбцы начинаются с нуля. Кроме того, «вес» означает, насколько этот виджет расширяется относительно других виджетов. С двумя рядами одинакового веса они будут одинаково расширяться при изменении размера окна. Вес нуля означает отсутствие расширения. Вес 2 для одной строки и 1 для другого означает, что первый будет увеличиваться вдвое больше, чем последний.
Для получения дополнительной информации см. this page on grid и this page on pack.
На не совсем несвязанной ноте ваше сообщение было очень полезно для меня, чтобы моя программа работала над тем, как применять «matplotlib.figure.Figure». Благодарю. – deadstump