Я создаю графический интерфейс с помощью Tkinter и создал несколько вкладок с помощью ttk.Notebook (). На Tab1 есть несколько полей Labels и Entry, а на Tab2 у меня есть сюжет matplotlib. Я использую исключительно менеджер компоновки сетки.
Проблема, с которой я столкнулся, заключается в том, что, когда я помещаю график на вкладку Tab2 (в строке = 0), кажется, что он также увеличивает размер строки 0 на вкладке 1, создавая большое пространство между двумя надписями. (который должен быть прямо друг над другом).
(Очень) Минимальная версия кода приведена ниже. Чего мне не хватает? Как я могу независимо контролировать высоту строки на каждой вкладке, чтобы виджеты на Tab2 не устанавливали высоту строки на Tab1? Заранее спасибо за помощь.
import tkinter as tk
from tkinter import ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.figure import Figure
matplotlib.use("TkAgg")
class MainGUI(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title('Title')
self.geometry('750x500')
# Adds tabs to main window
self.nb = ttk.Notebook(self)
self.nb.grid(row=0, column=0, columnspan=5, rowspan=4, sticky='NESW')
self.tab1 = ttk.Frame(self.nb)
self.nb.add(self.tab1, text='Tab1')
self.tab2 = ttk.Frame(self.nb)
self.nb.add(self.tab2, text='Tab2')
# defines a grid 10 x 5 cells in the main window & tabs
rows = 0
cols = 0
while rows < 10:
while cols < 5:
self.rowconfigure(rows, weight=1)
self.columnconfigure(cols, weight=1)
self.tab1.rowconfigure(rows, weight=1)
self.tab1.columnconfigure(cols, weight=1)
self.tab2.rowconfigure(rows, weight=1)
self.tab2.columnconfigure(cols, weight=1)
cols += 1
rows += 1
self.tab1Label = tk.Label(self.tab1, text="This is a Label")
self.tab1Label.grid(column=0, row=0, sticky='NW')
self.tab1Label2 = tk.Label(self.tab1, text="This is also a Label")
self.tab1Label2.grid(column=0, row=1, sticky='NW')
self.makePlot()
def makePlot(self):
f = Figure(figsize=(5, 5), dpi=100)
a = f.add_subplot(111)
a.plot([1, 2, 3, 4, 5, 6, 7, 8], [5, 6, 1, 3, 8, 9, 3, 5])
canvas = FigureCanvasTkAgg(f, self.tab2)
canvas.draw()
canvas.get_tk_widget().grid(column=2, row=0, columnspan=2, sticky='NSEW')
def main():
MainGUI().mainloop()
if __name__ == '__main__':
main()