代码:(有点讨厌)
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 =“ - ”)。grid(row = 0,column = 0) 0,column = 1)
self.canvas.bind(“< 1>”,lambda event:self.canvas.focus_set())
self.canvas。 bind(“a”,lambda事件:self.canvas.xview_scroll(-1,“units”))
self.canvas.bind(“d”,lambda event:self.canvas.xview_scroll(1,“units “))
self.canvas.bind(”s“,lambda事件:self.canvas.yview_scroll(-1,”units“))
self.canvas.bind :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()
解决方案
我花了一段时间没有一个Minimal,Complete,运行我认为你的想法。我自由地添加了一些东西,看看当我们放大。查看:
来自tkinter import *
class zoomer(Tk):
def __init __(self):
x = 100
y = 100
Tk .__ init __(self)
self.border = 10
self.size_x = x
self.size_y = y
#SIZE
self.app_sizex = 200
self.app_sizey = 200
fontSize = int(x / 20)
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.canvas.create_line(self.border ,self.border,x-self.border,y-self.border)
text1 = self.canvas.create_text(50,50,fill =“white”,font =(“Purisa”,fontSize))
self.canvas.itemconfig(text1,text =“Graphic Text”)
#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 = 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)
#zoom button
save_button = Button(self,text =“Zoom”)
save_button [“command”] = lambda:self.zoom_in()
save_button.grid(row = 3,column = 0,pady = 5)
def zoom_in
#clean canvas
self.canvas.delete(“all”)
self.size_x = int(self.size_x * 1.1)
self.size_y = int(self.size_y * 1.1)
x = self.size_x
y = self.size_y
fontSize = int(x / 20)
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.canvas.create_line(self.border,self.border,x-self.border,y-self.border)
text1 = self.canvas.create_text(self.size_x / 2,self .size_y / 2,fill =“white”,font =(“Purisa”,fontSize))
self.canvas.itemconfig(text1,text =“Graphic Text”)
self.canvas.configure scrollregion = self.canvas.bbox(“all”))
#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)
如果__name__ =='__main__':
my_gui = zoomer()
my_gui.mainloop()
我会离开你失去的一个练习。 (这意味着我得到它运行,但太懒了,回去,弄清楚究竟发生了什么错误。)
本文地址:IT屋 » Tkinter在canvas上调整大小滚动条不会调整