我目前正在尝试创建一个画布,其上会有其他对象,我想使用滚动条来显示画布上的对象占用太多空间,以便窗口的大小保持不变。 问题是,虽然我为画布设置了初始大小,但它会更改为适合其上的所有对象。我可以让画布保持特定的大小,以便我可以使用滚动条吗?
答案 0 :(得分:0)
myscrollbar =滚动条(myframe,orient =" vertical",command = canvas.yview)
canvas.configure(yscrollcommand = myscrollbar.set)
答案 1 :(得分:0)
以下是一个例子:
from 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(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)
#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(self):
#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)
if __name__ == '__main__':
my_gui=zoomer()
my_gui.mainloop()