Създадох фигура с променлив брой подплотове, използвайки matplotlib. Добавих лента за превъртане към страницата, съдържаща тази фигура, така че потребителят да може да превърта през различните фигури. Лентата за превъртане, след много опити, вече е функционална, но фигурата изглежда отрязана там, където е оригиналната долна част на страницата, оставяйки някои подграфи отрязани (вижте изображението).
Примерният код по-долу трябва да имитира проблема, с който се сблъсквам. Обаче кодът по-долу изглежда има свой собствен проблем: той няма да разтегли фигурата, както прави в моя оригинален код, за да възпроизведе приложеното изображение. Все пак трябва да ви даде представа - бих искал графиките да се простират над стандартния размер на рамката и лентата за превъртане да позволява на потребителя да вижда всички подграфики.
import tkinter as tk
from tkinter import *
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
f = Figure(figsize = (1,1), dpi = 100)
a = []
for i in range(0,20):
a.append(f.add_subplot(20,1,i+1))
f.set_figheight(60)
f.set_figwidth(14)
for i in range(0,20):
a[i].plot([1,2,3,4,5],[1,2,3,4,5])
a[i].set_title('Graph ' + str(i+1))
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side = "top", fill = "both", expand = True)
container.grid_columnconfigure(0,weight=1)
container.grid_rowconfigure(0,weight = 1)
self.minsize(620,400)
self.geometry("{0}x{1}+0+0".format(self.winfo_screenwidth(), self.winfo_screenheight()))
self.update_idletasks()
self.frames = {}
for F in (StartPage, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row = 0, column = 0, sticky = 'nsew')
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
button_p1 = tk.Button(self, text = "PageTwo →",
command = lambda: controller.show_frame(PageTwo))
button_p1.pack(side = TOP, fill = X)
label = tk.Label(self, text = "Start Page")
label.pack(fill = X, expand = True)
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
button_1 = tk.Button(self, text = "← Start Page",
command = lambda: controller.show_frame(StartPage))
button_1.pack(side = LEFT, anchor = N)
label_p1 = tk.Label(self, text = "PageTwo")
label_p1.pack()
canvas = FigureCanvasTkAgg(f,self)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.BOTTOM,fill=tk.X,expand = True)
scroll=Scrollbar(canvas.get_tk_widget())
scroll.config(command=canvas.get_tk_widget().yview)
scroll.pack(side = RIGHT, fill=Y)
canvas.get_tk_widget().pack(side = LEFT, expand = YES, fill = BOTH)
canvas.get_tk_widget().config(yscrollcommand=scroll.set)
canvas.get_tk_widget().config(scrollregion=(0,0,1000,10000),confine=True)
app = App()
app.mainloop()
Търсих решение през последните няколко дни, но не намерих такова, което да е специално съобразено с моя проблем или такова, което да променя, за да пасне.
Изображение - Изрязани подплотове
Предполагам, че решението трябва да включва увеличаване на височината на рамката или нещо подобно - опитах се да направя това без успех.
Надявам се да запазя същия размер на прозореца за всички други страници - искам само да увелича височината на PageTwo за целта на лентата за превъртане.