如何在tk.Canvas上定位形状和文字以使它们不被切断?

时间:2016-03-24 03:23:50

标签: python python-2.7 tkinter 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()

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

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

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

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

我注意到画布和窗户之间的画布周围最微小的空白区域。我设置了包装选项以填充所有方面,并在有额外空间可用时进行扩展。我想知道这是不是问题。

1 个答案:

答案 0 :(得分:4)

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

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

c.configure(highlightthickness=0, borderwidth=0)

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