【问题标题】:tkinter Canvas window sizetkinter 画布窗口大小
【发布时间】:2017-04-08 10:00:41
【问题描述】:

我需要知道 Canvas 何时调整大小(例如,当主框架最大化时)新的 Canvas 窗口大小。 不幸的是,如果我尝试 self.canvas['width'] ,在我看来,我总是得到初始化它时的宽度,而不是当前的宽度。 如何获取当前 Canvas 窗口尺寸?

【问题讨论】:

    标签: python-3.x tkinter tkinter-canvas


    【解决方案1】:

    当您检索self.canvas['width'] 时,您是在要求 tkinter 为您提供 已配置 小部件的宽度,而不是 实际 宽度。对于实际宽度,您可以使用.winfo_width()

    如果您想知道画布何时调整大小,您可以添加绑定到小部件上的<Configure> 事件。传递给绑定的事件对象具有width 属性,该属性也具有小部件的实际宽度。

    这是一个例子:

    import tkinter as tk
    
    root = tk.Tk()
    canvas = tk.Canvas(root, width=200, height=200, background="bisque")
    canvas.pack(side="bottom", fill="both", expand=True)
    
    canvas.create_text(10, 30, anchor="sw", tags=["event"])
    canvas.create_text(10, 30, anchor="nw", tags=["cget"])
    
    def show_width(event):
        canvas.itemconfigure("event", text="event.width: %s" % event.width)
        canvas.itemconfigure("cget", text="winfo_width: %s" % event.widget.winfo_width())
    
    canvas.bind("<Configure>", show_width)
    
    root.mainloop()
    

    【讨论】:

      【解决方案2】:

      一种可能的解决方案:

      try:
          import Tkinter as tk
      except:
          import tkinter as tk
      
      class myCanvas(tk.Frame):
          def __init__(self, root):
              #self.root = root
              self.w = 600
              self.h = 400
              self.canvas = tk.Canvas(root, width=self.w, height=self.h)
              self.canvas.pack( fill=tk.BOTH, expand=tk.YES)
      
              root.bind('<Configure>', self.resize)
      
          def resize(self, event):
              self.w = event.width
              self.h = event.height
              print ('width  = {}, height = {}'.format(self.w, self.h))
      
      root = tk.Tk()   
      root.title('myCanvas')
      myCanvas(root)
      root.mainloop()        
      

      请注意,事件通知的大小在任一方向上都宽了 2 个像素。我想这就是边界。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 2017-08-07
        • 2019-07-02
        • 1970-01-01
        • 2019-04-26
        相关资源
        最近更新 更多