#python #matplotlib #tkinter #canvas #scrollbar
Вопрос:
Я пытаюсь создать свое первое приложение, но у меня возникли некоторые проблемы. Сначала созданные мной полосы прокрутки, похоже, не работают, и как только я использую кнопку «показать», которая просто должна отображать некоторые точки, вертикальная полоса прокрутки появляется в «середине» кадра, а не на краю, как я хочу, более того, когда я пытался ее использовать, ничего не произошло. Кроме того, исчезает горизонтальная полоса прокрутки.
Помимо полос прокрутки, я хотел бы знать, как удалить созданный мной сюжет, потому что каждый раз, когда я использую «показать», сюжет появляется не в том же месте, что и первый сюжет, а под ним.
class MyApp(tk.Tk):
def __init__(self, *args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
tk.Tk.title(self, 'APP')
container = tk.Frame(self)
container.grid(column=0,row=0,sticky='nswe')
container.grid_rowconfigure(0,weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (Page1,Page2):
frame = F(container,self)
self.frames[F] = frame
frame.grid(row=0,column=0,sticky='nsew')
self.show_frame(Page1)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Page1(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self, parent)
self.canvas = tk.Canvas(self,width=500,height=500,
scrollregion=(0,0,500,800))
#Creating scrollbars
self.xscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
self.xscrollbar.pack(side=tk.BOTTOM,fill=tk.X)
self.xscrollbar.config(command=self.canvas.xview)
self.yscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
self.yscrollbar.pack(side=tk.RIGHT,fill=tk.Y)
self.yscrollbar.config(command=self.canvas.yview)
self.canvas.config(width=500,height=500)
self.canvas.config(xscrollcommand=self.xscrollbar.set,
yscrollcommand=self.yscrollbar.set)
self.canvas.pack(fill=tk.BOTH,expand=True)
label = tk.Label(self, text='Page1')
label.pack()
def showplot():
fig = Figure(figsize=(10,5),dpi=100)
a = fig.add_subplot(111)
x = [1,2,3,4,5,6,7,8,9,10]
y = [1.2,2,4.6,3,6,7,10,12,12.6,17]
a.plot(x,y)
canvas = FigureCanvasTkAgg(fig, self)
canvas.draw()
toolbar = NavigationToolbar2Tk(canvas, self)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
canvas._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH,expand=True)
def clean():
canvas.get_tk_widget().destroy()
button1 = ttk.Button(self, text='Go to Page2',
command=lambda: controller.show_frame(Page2))
button1.pack()
button2 = ttk.Button(self,text='Show', command = showplot)
button2.pack()
button3 = ttk.Button(self, text='Clean', command=clean)
button3.pack(side=tk.RIGHT, expand=True)
class Page2(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self, parent)
self.canvas = tk.Canvas(self,width=500,height=500,scrollregion=(0,0,500,800))
#Creating scrollbars
self.xscrollbar = tk.Scrollbar(self, orient=tk.HORIZONTAL)
self.xscrollbar.pack(side=tk.BOTTOM,fill=tk.X)
self.xscrollbar.config(command=self.canvas.xview)
self.yscrollbar = tk.Scrollbar(self, orient=tk.VERTICAL)
self.yscrollbar.pack(side=tk.RIGHT,fill=tk.Y)
self.yscrollbar.config(command=self.canvas.yview)
self.canvas.config(width=500,height=500)
self.canvas.config(xscrollcommand=self.xscrollbar.set,
yscrollcommand=self.yscrollbar.set)
self.canvas.pack(fill=tk.BOTH,expand=True)
app = MyApp()
app.mainloop()