微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用滚动条运动对齐 tkinter Canvas 中的文本大小?

如何解决如何使用滚动条运动对齐 tkinter Canvas 中的文本大小?

你好,我是韩国学生,目前在韩国学习。

class Layout(tk.Frame):
    def __init__(self,root):
        tk.Frame.__init__(self,root)
        self.canvas = tk.Canvas(self,width=400,height=750,background="bisque")
        self.xsb = tk.Scrollbar(self,orient="horizontal",command=self.canvas.xview)
        self.ysb = tk.Scrollbar(self,orient="vertical",command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.ysb.set,xscrollcommand=self.xsb.set)
        self.canvas.configure(scrollregion=(0,1000,1000))

        self.xsb.grid(row=1,column=0,sticky="ew")
        self.ysb.grid(row=0,column=1,sticky="ns")
        self.canvas.grid(row=0,sticky="nsew")
        self.grid_rowconfigure(0,weight=1)
        self.grid_columnconfigure(0,weight=1)

        #self.canvas.create_text(50,10,text="Click and drag to move the canvas\nScroll to zoom.")

        # This is what enables using the mouse:
        self.canvas.bind("<ButtonPress-1>",self.move_start)
        self.canvas.bind("<B1-Motion>",self.move_move)
        #linux scroll
        self.canvas.bind("<Button-4>",self.zoomerP)
        self.canvas.bind("<Button-5>",self.zoomerM)
        #windows scroll
        self.canvas.bind("<MouseWheel>",self.zoomer)

    #move
    def move_start(self,event):
        self.canvas.scan_mark(event.x,event.y)
    def move_move(self,event):
        self.canvas.scan_dragto(event.x,event.y,gain=1)

    #windows zoom
    def zoomer(self,event):
        if (event.delta > 0):
            self.canvas.scale("all",event.x,1.1,1.1)
        elif (event.delta < 0):
            self.canvas.scale("all",0.9,0.9)
        self.canvas.configure(scrollregion = self.canvas.bBox("all"))

    #linux zoom
    def zoomerP(self,event):
        self.canvas.scale("all",1.1)
        self.canvas.configure(scrollregion = self.canvas.bBox("all"))
    def zoomerM(self,0.9)
        self.canvas.configure(scrollregion = self.canvas.bBox("all"))

如您所见,上面的代码 我已经编写了代码显示 Canvas 小部件。 我还将滚动条与画布小部件中显示的材料对齐。

 monitor1.canvas.create_rectangle(50 + 200*(l-3*ll) + 800*(k % 3),250 + 150*(ll) + 150*(vertical_append//3 + 2*kk),90 + 200*(l-3*ll) + 800*(k % 3),300 + 150*(ll) + 150*(vertical_append//3 + 2*kk) + 10*(int(each_info[5]) - 4),fill = "green")
                monitor1.canvas.create_rectangle(90 + 200*(l-3*ll) + 800*(k % 3),245 + 150*(ll) + 150*(vertical_append//3 + 2*kk),110 + 200*(l-3*ll) + 800*(k % 3),305 + 150*(ll) + 150*(vertical_append//3 + 2*kk) + 10*(int(each_info[5]) - 4),fill = "red")
                monitor1.canvas.create_rectangle(110 + 200*(l-3*ll) + 800*(k % 3),150 + 200*(l-3*ll) + 800*(k % 3),fill = "green")
                    
                # Labelling    
                monitor1.canvas.create_text(70 + 200*(l - 3*ll) + 800*(k % 3),275 + 5*(int(each_info[5]) - 4) + 150*(ll) + 150*(vertical_append//3 + 2*kk),text = each_info[1],font =("Helvetica",10)) 
                monitor1.canvas.create_text(100 + 200*(l - 3*ll) + 800*(k % 3),270 + 5*(int(each_info[5]) - 4) + 150*(ll) + 150*(vertical_append//3 + 2*kk),text = each_info[2],font = ("Helvetica",10))
                monitor1.canvas.create_text(130 + 200*(l - 3*ll) + 800*(k % 3),text = each_info[3],10))
                monitor1.canvas.create_text(110 + 200*(l - 3*ll) + 800*(k % 3),235 + 150*(ll) + 150*(vertical_append//3 + 2*kk),text = each_info[0] + " " + each_info[4],205 + 150*(ll) + 150*(vertical_append//3 + 2*kk),text = key,220 + 150*(ll) + 150*(vertical_append//3 + 2*kk),text = "width: " + each_info[5],10))

如您所见,上面的代码 我已经创建了上面的矩形和文本

rectanges & text in canvas before zoom out rectanges & text in canvas after zoom out

正如您在 png 格式的图像中所看到的, 画布小部件中的矩形与滚动条运动对齐 当我用滚动条缩小时,它们变小 当我用滚动条放大时,它们会变大

但画布小部件中的文本未与滚动条运动对齐

如何将画布中创建的文本小部件与滚动条运动对齐

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。