所以我正在学习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坐标,否则我只能移动一次。我可以提前设置它,但如果可能的话,我想避免使用该选项。
答案 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}}然后造型并不是那么直截了当,尽管并不困难。