Хотя я считаю, что моя проблема проста, я просто не могу найти ответ и не выясню, как это исправить. В принципе, у меня есть холст, который после нажатия кнопки его размер изменяется (например, увеличение), однако мои полосы прокрутки не настраиваются, чтобы покрыть область прокрутки отверстий.Tkinter на холсте изменить размер полосы прокрутки не регулируется
Кто-нибудь знает, как это исправить?
Код: (несколько противным)
from Tkinter import *
class Graphic(Tk): #Graphical Interface
def __init__(self, x, y):
#INITIALIZATION
Tk.__init__(self)
self.border = 10
self.size_x = x
self.size_y = y
self.mouse = ""
self.cross_list = []
self.mode = ""
#SIZE
self.app_sizex = 1800
self.app_sizey = 1000
self.title("Graphic")
self.geometry(str(self.app_sizex+10) + "x" + str(self.app_sizey+40))
#CANVAS + BORDER
self.canvas = Canvas(self, width = self.app_sizex, height = self.app_sizey, scrollregion=(0,0,x,y))
self.canvas.grid(row=0, column=0, sticky="nsew")
self.canvas.create_line(self.border, self.border, self.border, y-self.border)
self.canvas.create_line(x-self.border, self.border, x-self.border, y-self.border)
self.canvas.create_line(self.border, self.border, x-self.border, self.border)
self.canvas.create_line(self.border, y-self.border, x-self.border, y-self.border)
self.cross_x = self.canvas.create_line(self.border, self.border, self.border, self.border)
self.cross_y = self.canvas.create_line(self.border, self.border, self.border, self.border)
#SCROLLING BARS
self.vbar=Scrollbar(self,orient=VERTICAL)
self.vbar.grid(row=0, column=1, sticky="ns")
self.vbar.config(command=self.canvas.yview)
self.hbar=Scrollbar(self,orient=HORIZONTAL)
self.hbar.grid(row=2, column=0, sticky="ew")
self.hbar.config(command=self.canvas.xview)
self.canvas.config(xscrollcommand=self.hbar.set, yscrollcommand=self.vbar.set)
#BUTTONS
self.buttonframe = Frame(self)
self.buttonframe.grid(row=1, column=0)
Button(self.buttonframe, text = "+", command=self.zoom_in).grid(row=0, column=0)
Button(self.buttonframe, text = "-").grid(row=0, column=1)
self.canvas.bind("<1>", lambda event: self.canvas.focus_set())
self.canvas.bind("a", lambda event: self.canvas.xview_scroll(-1, "units"))
self.canvas.bind("d", lambda event: self.canvas.xview_scroll(1, "units"))
self.canvas.bind("w", lambda event: self.canvas.yview_scroll(-1, "units"))
self.canvas.bind("s", lambda event: self.canvas.yview_scroll(1, "units"))
self.canvas.focus_set()
def zoom_in(self):
#Clean canvas
self.canvas.delete("all")
self.size_x = self.size_x * 1.1
self.size_y = self.size_y * 1.1
x=self.size_x
y=self.size_y
self.canvas.scrollregion=(0,0,self.size_x,self.size_y)
self.canvas.create_line(self.border, self.border, self.border, y-self.border)
self.canvas.create_line(x-self.border, self.border, x-self.border, y-self.border)
self.canvas.create_line(self.border, self.border, x-self.border, self.border)
self.canvas.create_line(self.border, y-self.border, x-self.border, y-self.border)
#SCROLLING BARS
self.vbar.config(command=self.canvas.yview)
self.hbar.config(command=self.canvas.xview)
self.canvas.config(xscrollcommand=self.hbar.set, yscrollcommand=self.vbar.set)
graphics_window = Graphic(1000, 1000)
graphics_window.mainloop()
Если вы дадите более полный пример, мы сможем что-то с ним сделать. – user1683793
Теперь я отредактирую его. Готово. –
Просьба привести полный пример. См. Http://www.stackoverflow.com/help/mcve –