我有这个类来创建状态栏:
class Statusbar(Canvas):
'''Creates a statusbar widget'''
def __init__(self, master = None, **options):
if not master: master = Tk()
self.master, self.options = master, options
self.barFill, self.addText, self.value = self.options.get('barFill', 'red'), self.options.get('addText', True), 0
for option in ('barFill', 'addText'):
if option in self.options: del self.options[option]
Canvas.__init__(self, master, **self.options)
self.offset = self.winfo_reqwidth() / 100
self.height = self.winfo_reqwidth()
if self.addText: self.text = self.create_text(self.winfo_reqwidth()/2, self.winfo_reqheight()/2, text = '0%')
self.bar = self.create_rectangle(0, 0, self.value, self.height, fill = self.barFill)
def setValue(self, value):
'''Sets the value of the status bar as a percent'''
self.value = value * self.offset
self.coords(self.bar, 0, 0, self.value, self.height)
if self.addText: self.itemconfigure(self.text, text = str(self.value/self.offset) + '%')
def change(self, value):
'''Changes the value as a percent'''
self.value += (value * self.offset)
self.coords(self.bar, 0, 0, self.value, self.height)
if self.addText: self.itemconfigure(self.text, text = str(self.value/self.offset) + '%')
我的问题是文本总是在矩形下绘制。因此,当矩形到达文本时,您将无法再看到文本。我怎样才能解决这个问题?提前谢谢。
答案 0 :(得分:2)
一个对象位于另一个对象上的事实称为堆叠顺序。默认情况下,稍后创建的对象具有比先前创建的对象更高的堆叠顺序。因此,一种解决方案是绘制矩形,然后绘制文本。
您还可以使用画布的lift
和lower
命令在堆叠顺序中向上或向下移动内容。您必须为其提供要提升或降低的内容的ID或标记,以及可选的对象的ID或标记,以使第一个对象位于上方或下方。
因此,例如,您可以将矩形上方的文本提升为:
self.lift(self.text, self.bar)
如果你想变得非常花哨,你可以创建层的概念。我在另一个答案中给出了一个例子:https://stackoverflow.com/a/9576938/7432
答案 1 :(得分:1)
在我的编程课中,我们说过最后放置你不想被阻止的任何文本。因此,将文本放在用于绘制
的函数的底部