画布上的Tkinter调整大小滚动条无法调整

托普·洛伦科(Tope Lourenco)

尽管我认为我的问题很简单,但我只是找不到答案,也找不到解决方法。基本上,我有一个画布,一旦按下按钮,它就会被调整大小(如放大),但是,我的滚动条无法调整以覆盖孔的滚动区域。

有谁知道如何解决这个问题?

代码:(有点讨厌)

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()
用户名

我花了一些时间没有一个最小,完整和可验证的示例,但是我运行了一些东西,我认为它确实符合您的想法。当我们缩放时,我可以随意添加一些要查看的内容。看看这个:

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()

我会把你想念的东西丢掉作为练习。(这意味着我可以运行它,但是我懒得回去确切找出问题出在哪里。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

画布上的Tkinter调整大小滚动条无法调整

来自分类Dev

tkinter调整窗口大小而滚动条不消失

来自分类Dev

在滚动条上添加阴影以调整滚动条头的大小

来自分类Dev

Tkinter-框架内的标签数更改时,滚动条不会调整大小

来自分类Dev

如何为画布大小更新Tkinter滚动条大小

来自分类Dev

为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

来自分类Dev

为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

来自分类Dev

Tkinter画布无法正确调整大小

来自分类Dev

在tkinter画布上动态调整矩形大小

来自分类Dev

如何调整滚动条?

来自分类Dev

如何从已定义位置开始逐步调整滚动条上的粘性标题的大小

来自分类Dev

滚动条在调整大小时不会隐藏。

来自分类Dev

fancybox 2调整大小期间的iframe滚动条

来自分类Dev

调整大小后,QTextEdit不显示水平滚动条

来自分类Dev

滚动条在页面加载后未调整大小

来自分类Dev

使用滚动条调整框架中的列大小

来自分类Dev

在Tkinter中将滚动条拉伸到画布大小

来自分类Dev

无法调整画布大小

来自分类Dev

如果用户调整在fullpage.js上创建的窗口的大小,如何显示水平滚动条

来自分类Dev

考虑滚动条调整<div>宽度

来自分类Dev

了解负滚动条调整

来自分类Dev

调整浏览器窗口大小时,垂直/水平滚动条不会出现

来自分类Dev

jQuery可调整大小的一个方向移动,并删除滚动条

来自分类Dev

调整大小时会显示JavaFX TextArea滚动条,即使不需要

来自分类Dev

使用内部滚动条创建可拖动的,可调整大小的div容器

来自分类Dev

滚动条出现时jQuery窗口大小调整问题

来自分类Dev

调整浏览器窗口大小时,垂直/水平滚动条不会出现

来自分类Dev

防止ui可调整大小的句柄自动触发溢出滚动条

来自分类Dev

在角度2+中动态调整元素大小时,如何考虑滚动条的位置?

Related 相关文章

  1. 1

    画布上的Tkinter调整大小滚动条无法调整

  2. 2

    tkinter调整窗口大小而滚动条不消失

  3. 3

    在滚动条上添加阴影以调整滚动条头的大小

  4. 4

    Tkinter-框架内的标签数更改时,滚动条不会调整大小

  5. 5

    如何为画布大小更新Tkinter滚动条大小

  6. 6

    为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

  7. 7

    为什么画布在添加小部件时不使用滚动条滚动和自动调整大小?

  8. 8

    Tkinter画布无法正确调整大小

  9. 9

    在tkinter画布上动态调整矩形大小

  10. 10

    如何调整滚动条?

  11. 11

    如何从已定义位置开始逐步调整滚动条上的粘性标题的大小

  12. 12

    滚动条在调整大小时不会隐藏。

  13. 13

    fancybox 2调整大小期间的iframe滚动条

  14. 14

    调整大小后,QTextEdit不显示水平滚动条

  15. 15

    滚动条在页面加载后未调整大小

  16. 16

    使用滚动条调整框架中的列大小

  17. 17

    在Tkinter中将滚动条拉伸到画布大小

  18. 18

    无法调整画布大小

  19. 19

    如果用户调整在fullpage.js上创建的窗口的大小,如何显示水平滚动条

  20. 20

    考虑滚动条调整<div>宽度

  21. 21

    了解负滚动条调整

  22. 22

    调整浏览器窗口大小时,垂直/水平滚动条不会出现

  23. 23

    jQuery可调整大小的一个方向移动,并删除滚动条

  24. 24

    调整大小时会显示JavaFX TextArea滚动条,即使不需要

  25. 25

    使用内部滚动条创建可拖动的,可调整大小的div容器

  26. 26

    滚动条出现时jQuery窗口大小调整问题

  27. 27

    调整浏览器窗口大小时,垂直/水平滚动条不会出现

  28. 28

    防止ui可调整大小的句柄自动触发溢出滚动条

  29. 29

    在角度2+中动态调整元素大小时,如何考虑滚动条的位置?

热门标签

归档