遇到了奇怪的问题:canvas.bbox('ALL')
得到None
。
所以主题说canvas
只有在代码中有一些.create_xxx()
方法时才给予。问题是类FigureCanvasTkAgg
在它的__init__
方法中使用create_image
方法,我认为在我的小代码段中,当我创建thic类的示例时,它应该在调用instance.bbox
命令时给我一些坐标框。但它没有...
self.Frame = Frame(root, bg = 'white')
self.Frame.place (relx = 0.37 , rely = 0.05 , relheight = 0.85 , relwidth = 0.51)
self.canvas = FigureCanvasTkAgg ( fig , master = self.Frame) # A tk.DrawingArea.
self.canvas.get_tk_widget ().place ( relx = 0 , rely = 0)
self.canvas.get_tk_widget ().config ( yscrollcommand = self.vbar.set ,
scrollregion = (0,0,w,639*h/10 ))
self.canvas.get_tk_widget ().update_idletasks ()
print(self.canvas.get_tk_widget ().winfo_width(),self.canvas.get_tk_widget ().winfo_height() )
self.Frame.update_idletasks ()
print(self.canvas.get_tk_widget ().bbox('ALL'))
self.toolbar = NavigationToolbar2Tk ( self.canvas , self.Frame )
self.vbar.pack ( side = RIGHT , fill = Y)
2条答案
按热度按时间h7appiyu1#
遇到了奇怪的问题:bbox('ALL ')给出"无"。
当您使用
'ALL'
时,它将查找所有带有标记'ALL'
的画布对象,但未找到任何对象。如果您想要所有对象的边界框,
bbox
的正确参数是'all'
,而不是'ALL'
。文字字符串"all"被画布视为特殊情况,以表示画布上的所有对象。x3naxklr2#
@BryanOakley的回答确实是一个重要的澄清。
不幸的是,已故的约翰·希普曼的excellent documentation对于现在的tkinter确实有一个错误。它指出:
目前,如果使用
canvas.bbox()
,则tkinter返回_tkinter.TclError: wrong # args: should be ".!xxxxxxx bbox tagOrId ?tagOrId ...?"
有一些在线tkinter文档提倡使用
ALL
。one就是一个例子。然而,大多数读者可能会忘记,from tkinter import *
语句已经被用于导入所有tkinter对象,这也不符合PEP 8关于import
语句的指导方针。导入tkinter的一个好的实践是使用import tkinter as tk
。按照这个方法,你的陈述应该是:或
**总结:**在
tk.Canvas
对象/示例上使用.bbox(tk.ALL)
或.bbox('all')
。