Python - 移动object \ label \按钮并更改它的属性

时间:2013-02-18 01:16:28

标签: python tkinter

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

1 个答案:

答案 0 :(得分: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)

我不知道有一种方法可以按照移动方法为画布移动小部件的增量。

至于哪一个最好,我不能在他们之间想太多。我想使用Canvas意味着你不能重叠窗口中可能存在的任何其他小部件,因为文本只会滚出视图,如果你开始使用ttk版本的{ {1}}然后造型并不是那么直截了当,尽管并不困难。