python - Tkinter Canvas - 在顶部绘制文本

标签 python tkinter

我有这个类来创建状态栏:

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) + '%')

我的问题是文本始终绘制在矩形下方。因此,当矩形到达文本时,您将无法再看到文本。我怎样才能解决这个问题?提前致谢。

最佳答案

一个对象位于另一个对象之上的事实称为堆叠顺序。默认情况下,较晚创建的对象具有比较早创建的对象更高的堆叠顺序。因此,一种解决方案是先绘制矩形,然后绘制文本。

您还可以使用 Canvas 的 liftlower 命令按堆叠顺序向上或向下移动内容。您必须为其指定要提升或降低的物体的 ID 或标签,以及您希望第一个物体位于上方或下方的物体的 ID 或标签(可选)。

例如,您可以将文本升高到矩形上方,如下所示:

self.lift(self.text, self.bar)

如果你想变得更奇特,你可以创建图层的概念。我在另一个答案中举了一个例子,在这里:https://stackoverflow.com/a/9576938/7432

关于python - Tkinter Canvas - 在顶部绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407346/

相关文章:

python - Selenium - 从 highcharts 获取数据

python - 如何在不使用键名的情况下确保 Google App Engine 中对象的数据完整性?

python - Python 多线程协助

python - 了解 PyDict_Check 行为

python - 开始从给定行开始迭代 csv 文件?

python-3.x - 在 tkinter 屏幕上执行 ImageGrab

python-3.x - tkinter 网格不根据窗口大小调整大小

python - 为什么我不能在 OS X 上更改 tkMessagebox.askyesno() 上的图标?

python - 用颜色填充 Tkinter Canvas 对象之间的空间

Python Tkinter 填充问题