Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter画布-在顶部绘制文本_Python_Tkinter - Fatal编程技术网

Python Tkinter画布-在顶部绘制文本

Python Tkinter画布-在顶部绘制文本,python,tkinter,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

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

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

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

在我的编程课上,我们说把你不想被阻止的文本放在最后。因此,将文本放在使用什么函数进行绘制的底部。一个对象位于另一个对象之上的事实称为堆叠顺序。默认情况下,稍后创建的对象的堆叠顺序高于先前创建的对象。因此,一种解决方案是绘制矩形,然后绘制文本

您还可以使用画布的
lift
lower
命令按堆叠顺序上下移动物品。您必须为其提供一个您想要提升或降低的id或标签,以及您想要第一个对象位于上方或下方的对象的可选id或标签

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

self.lift(self.text, self.bar)
如果你想得到真正的幻想,你可以创建层的概念。我在另一个答案中给出了一个例子: