我如何在 tk.Canvas 上定位形状和文本,以免它们被切断?

Seb*_*man 3 python tkinter python-2.7 tkinter-canvas

我正在使用 Tkinter 的 Canvas 为我的 GUI 创建简单的图形。我注意到我想将我的形状和文本放在画布的角落,但它们最终被部分隐藏。对于文本,我看到anchor文档建议设置一个选项NW,例如,如果我想将文本放在左上角,但即使如此,我也只看到文本开头的一点点被剪切离开。这是我的代码:

import Tkinter as tk

root = tk.Tk()
root.geometry("300x300")
c = tk.Canvas(root, bg="green", width=300, height=300)
c.pack(fill="both", side="right", expand=True)
c.create_text(0,0,text="Hello world!", anchor="nw")

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我知道我可以调整文本开始位置的坐标,并通过反复试验找出哪个给出最好的结果,但我想知道是否有更聪明的方法来做到这一点。

当我尝试创建形状(例如圆形)时,我注意到类似的事情:

import Tkinter as tk

root = tk.Tk()
root.geometry("300x300")
c = tk.Canvas(root, bg="green", width=300, height=300)
c.pack(fill="both", side="right",expand=True)
c.create_oval(0,0,300,300, fill="gray")

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

对于圆,最靠近边缘的圆部分被切除。如果我拉伸并拖动窗口变大,我可以看到圆圈的最右侧和最底部,因此它们正在被绘制。我也没有看到类似于anchor圆圈的选项。

我注意到我的画布周围、画布和窗户之间的空白空间最小。我将包装选项设置为对所有面进行填充,并在有额外空间时进行扩展。我想知道这是否是问题所在。

Bry*_*ley 5

不幸的是,画布边框和高亮环位于小部件内部,因此使用了一些可绘制区域,并且可能隐藏其他对象的一部分。

最简单的解决方案是将highlightthickness和borderwidth属性设置为零:

c.configure(highlightthickness=0, borderwidth=0)
Run Code Online (Sandbox Code Playgroud)

如果您需要边框和/或高光环,请将画布放在框架内。