Python-移动对象\标签\按钮并更改其属性

2024-05-20 14:38:18 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在学习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坐标,否则我只能移动一次。我可以提前设定,但如果可能的话,我想避免这个选择。


Tags: 方法textself示例createtags标签label
1条回答
网友
1楼 · 发布于 2024-05-20 14:38:18

两者都有办法。

首先,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)

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

至于哪一个是最好的,我想不出他们之间有什么不同。我想使用Canvas将意味着您不能重叠窗口中的任何其他窗口小部件,因为文本只会滚动出视图,如果您开始使用ttk版本的Label,那么样式设置并不是很直接,尽管并不困难。

相关问题 更多 >