Создание маркированного списка на виджете метки с помощью Python tkinter - PullRequest
0 голосов
/ 27 сентября 2018

Есть ли способ создать висячий список с отступами, используя виджет метки tkinter?Примечание. Использование стандартных пуль не * или -.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вам лучше использовать виджет сообщений, который представляет собой виджет меток, предназначенный для отображения текста в несколько строк.Для ваших пуль вы можете использовать строку Unicode.Например:

import tkinter as tk

root = tk.Tk()

point = '\u2022'
msg = tk.Message(root, text='Hello\n%s World.' % point)
msg.pack()
0 голосов
/ 27 сентября 2018

Я создал класс, который делает то, что вы хотите:

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

Таким образом, вы можете использовать pack, place или grid,Пример:

Сетка:

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

Место:

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

Упаковка:

lbal.l.pack()
0 голосов
/ 27 сентября 2018

Вы можете использовать кодовые точки 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...