@berrybtw

Как сделать линию tkinter?

Как сделать линию в Tkinter под текстом? Например, есть текст с размером 50
ТЕКСТ
--------
текст2
Только чтобы эта ------, была слитая и ее цвет можно было менять, соответственно и ширину.
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 1
SuckMyPython
@SuckMyPython
matrix.polling(none_stop=True)
Управление на колёсико [Окно и канвас создайте сами]
#Импорты
from tkinter.font import Font

#<<<<<<<<<<<<<<<<<<<<<<<
#Создание окна и канваса
#>>>>>>>>>>>>>>>>>>>>>>>

kef1 = 1.13     #Кэф изменения длины линии (↑↑)
kef2 = kef1*2   #Кэф изменения расстояния вниз от текста (↑↓)    "2" тоже норм
kef3 = 5        #Шаг изменения величины шрифта (↑↑)
kef4 = 1        #Кэф изменения толщины линии (↑↑)
font_size = 10  #Размер шрифта
font = Font(family="TkDefaultFont", size=font_size, weight="bold")  #Параметры шрифта
line_metric = font.metrics("linespace")     #Получение размера шрифта
clr_text = 'black'  #Цвет текста
clr_line = 'red'    #Цвет линии
line_w = 4          #Базовая толщина линии

line_l = line_metric*kef1   #Первичная длина линии

text = canvas.create_text(200,200, text='TEXT', font=font, fill=clr_text)                               #Создание текста на канвасе
x, y = canvas.coords(text)                                                                              #Получение координат центра текста
line = canvas.create_line(x-line_l,y+line_l/kef2,x+line_l,y+line_l/kef2, width=line_w, fill=clr_line)   #Создание линии на канвасе

def Wh_rot(event):
    global font_size, line_w, kef3, kef4
    if event.num == 4 or event.delta == 120:    #Определение стороны вращения Mouse_Wheel
        font_size+=kef3     #Изменение значения размера шрифта (+)
        line_w+=kef4        #Изменение толщины линии (+)
        font = Font(family="TkDefaultFont", size=font_size, weight="bold")    #Параметры шрифта
        canvas.itemconfig(text, font=font)  #Изменение размера шрифта на канвасе (+)
        
        line_metric = font.metrics("linespace") #Получение размера шрифта
        line_l = line_metric*kef1               #Изменение значения длины линии (+)
        x, y = canvas.coords(text)              #Получение координат центра текста
        crd = x-line_l, y+line_l/kef2, x+line_l, y+line_l/kef2  #Присваивание значения длины координатам линии
        canvas.coords(line, crd)                #Изменение длины линии на канвасе (+)
        canvas.itemconfig(line, width=line_w)   #Изменение толщины линии на канвасе (+)

    else:   #(-)
        font_size-=kef3
        if font_size<5:     #Ограничение отрицательных величин
            font_size=5     #^
        line_w-=kef4
        if line_w<1:        #^
            line_w=1        #^
        font = Font(family="TkDefaultFont", size=font_size, weight="bold")
        canvas.itemconfig(text, font=font)
        
        line_metric = font.metrics("linespace")
        line_l = line_metric*kef1
        x, y = canvas.coords(text)
        crd = x+line_l, y+line_l/kef2, x-line_l, y+line_l/kef2
        canvas.coords(line, crd)
        canvas.itemconfig(line, width=line_w)

root.bind('<MouseWheel>', Wh_rot)   #Крути колесо мыши

root.mainloop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы