我已经找这个很久了。在 tkinter 中获取 Canvas 的高度/宽度有这么难吗? 我想做这样的事情:
c = Tk.Canvas(self, heigth=12, width=12)
c.create_oval(0, 0, self.height, self.width)
这样我就可以用画布的宽度/高度的周长画一个圆。
为什么我找不到画布的宽度/高度等属性?
c.winfo_width
和 c.winfo_height
不起作用,因为这只会给我带来错误。
你能帮我吗?这真的很烦人,因为即使在构造函数中也有属性
height
和 width
...
使用winfo_reqwidth和winfo_reqheight:
root = tk.Tk()
c = tk.Canvas(root, height=120, width=120)
c.create_oval(0, 0, c.winfo_reqheight(), c.winfo_reqwidth())
c.pack()
root.mainloop()
您必须在
<tkinter.Tk>.update
之前调用 <tkinter.Canvas>.pack
和 winfo_height
,如下所示:
import tkinter as tk
root = tk.Tk()
c = tk.Canvas(root, height=120, width=120)
c.pack()
root.update()
c.create_oval(0, 0, c.winfo_height(), c.winfo_width())
root.mainloop()
此代码的部分内容也是从@hussic 窃取的。
<tkinter.Tk>.update
确保所有 tkinter 任务均已完成。这些任务可以是确保几何管理器为小部件保留空间以及在屏幕上绘制小部件之类的任务。调用 <tkinter.Widget>.update
(其中 Widget
可以是任何 tkinter 小部件)与调用 <tkinter.Tk>.update
相同,因为它将调用相同的 tcl 函数。
Python Tk 中正确的方法是使用:
canvas_width = int(canvas.__getitem__('width'))
canvas_height = int(canvas.__getitem__('height'))
Tk 将属性存储为字符串(Tcl 规则!),因此需要强制转换为 int。