使用python tkinter在标签小部件上创建项目符号列表

时间:2018-09-27 07:37:51

标签: python tkinter

有什么方法可以使用tkinter标签小部件创建悬挂式缩进列表?注意:请使用适当的标准子弹,而不是*或-。

3 个答案:

答案 0 :(得分:2)

我上了一堂课,可以做你想做的事

class BLabel(object):
    b = "•"
    def __init__(self,master):
        import tkinter as tk
        self.l = tk.Label(master)
    def add_option(self,text):
        if self.l.cget("text") == "":
            self.l.config(text=self.b+" "+text)
        else:
            self.l.config(text=self.l.cget("text") +"\n"+ self.b + " "+text)

您可以像这样使用它:

lbal = BLabel(master=master)    
lbal.add_option("Bullet1")    #<-- adding item
lbal.add_option("Bullet2")    #<-- adding item
lbal.l.pack()     #<-- Packing

这是示例代码:

import tkinter as tk

root = tk.Tk()

class BLabel(object):
    b = "•"
    def __init__(self,master):
        import tkinter as tk
        self.l = tk.Label(master)
    def add_option(self,text):
        if self.l.cget("text") == "":
            self.l.config(text=self.b+" "+text)
        else:
            self.l.config(text=self.l.cget("text") +"\n"+ self.b + " "+text)



lbal = BLabel(master=root)
lbal.add_option("Bullet1")
lbal.add_option("Bullet2")
lbal.l.pack()        

这是上面代码的输出:

bullet in tkinter label

这样,您可以使用packplacegrid。示例:

网格:

lbal.l.grid(row=0,column=0)

地点:

lbal.l.place(x=0,y=0)

包装:

lbal.l.pack()

答案 1 :(得分:1)

您可以使用unicode代码点作为粗略的实现:

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class BulletLabel(tk.Label):
    def __init__(self, master, *args, **kwargs):
        text = kwargs.pop('text', '')
        kwargs['text'] = self.bulletise(text)
        tk.Label.__init__(self, master, *args, **kwargs)

    def bulletise(self, text):
        if len(text) == 0: # no text so no bullets
            return ''
        lines = text.split('\n')
        parts = []
        for line in lines: # for each line
            parts.extend(['\u2022', line, '\n']) # prepend bullet and re append newline removed by split
        return ''.join(parts)

    def configure(self, *args, **kwargs):
        text = kwargs.pop('text', '')
        if text != '':
            kwargs['text'] = self.bulletise(text)
        tk.Label.configure(*args, **kwargs)


root = tk.Tk()

blabel = BulletLabel(root, text='one\ntwo\nthree')
blabel.pack()

root.mainloop()

答案 2 :(得分:0)

使用消息小部件会更好,这是一个标签小部件,旨在显示多行文本。对于子弹,您可以使用unicode字符串。例如:

import tkinter as tk

root = tk.Tk()

point = '\u2022'
msg = tk.Message(root, text='Hello\n%s World.' % point)
msg.pack()