canvas教程

Tkinter在canvas上调整大小滚动条不会调整(2)

字号+ 作者:H5之家 来源:H5之家 2017-12-05 09:03 我要评论( )

代码:(有点讨厌) 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

代码:(有点讨厌)



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上调整大小滚动条不会调整

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  •  教学工作坊(总第129期):混合式教学实用策略与CANVAS实操(在线报名)

    教学工作坊(总第129期):混合式教学实用策略与CANVAS实操(在线报名)

    2017-12-05 10:19

  • JS+canvas实现五子棋人机大战

    JS+canvas实现五子棋人机大战

    2017-12-05 08:00

  • 在Canvas上画图intro详解-绘图-界面API-微信小程序API-微信小程序开发教程

    在Canvas上画图intro详解-绘图-界面API-微信小程序API-微信小程序开

    2017-12-04 16:11

  • Canvas Login

    Canvas Login

    2017-12-04 16:10

网友点评