0

所以我正在学习 python,而教我的书给了我两种使用 tkinker 创建标签的方法:

self.canvas.create_text(30,10,text="Welcome",tags="text")

&

self.lbl = Label(frame1, text = "Welcome")

在前面的例子中,移动它很容易:

self.canvas.move("text", 1, 0)

在后一个示例中,更改其背景颜色很容易:

self.lbl["bg"] = "red"

但是,我知道如何在任一示例中移动它并更改它的背景颜色,至少不知道如何逐步移动它。我可以做这个:

 self.lbl.place(x=2)

但除非我能提前得到 x 坐标,否则我只能移动一次。我可以提前设置它,但如果可能的话,我想避免这个选项。

4

1 回答 1

4

有两种方法可以做到。

首先,Canvas文本没有背景,但您可以使用矩形创建自己的背景。

text = self.canvas.create_text(30, 10, text="Welcome", tags="text")
# The canvas.bbox method returns the corner coordinates of the provided item id.
rect = self.canvas.create_rectangle(self.canvas.bbox(text), fill='red')
# Then you need to reposition the rectangle so that it is behind the text.
self.canvas.lower(rect, text)

从那里您只需按照您在问题中提到的相同方式移动它们。将组标签添加到文本和矩形将使您不必分别移动这两个项目。

.winfo_x()其次,您可以使用和.winfo_y()方法获取小部件的当前 x、y 坐标。因此,移动Label变成了一个简单的加法/减法问题:

self.lbl.place(x=self.lbl.winfo_x()+2)

我不知道有一种方法可以像移动方法对画布所做的那样以增量方式移动小部件。

至于哪个最好,我想不出他们之间的太多。我想使用 aCanvas意味着你不能重叠可能在窗口中的任何其他小部件,因为文本只会滚动到视图之外,如果你开始使用的ttk版本,Label那么样式就不那么简单了,虽然这并不难。

于 2013-02-21T22:29:27.420 回答