Tkinter: стиль текста в зависимости от местоположения в списке

Обратите внимание, что я новичок в Tkinter. Я также просмотрел текстовые теги, но не знаю, как их применить в данном случае.

Я хотел бы изменить стиль текста в зависимости от его местоположения в списке (на самом деле это список списков).

Структура "results_list":

[["header1","entry1"],["header2","entry2"]...]

Я хотел бы, чтобы у каждого «заголовка» был другой стиль шрифта, чем у записей. Я не знаю, как это сделать/где найти дополнительную информацию (я пытался читать документацию, но не смог понять). Также обратите внимание: каждая запись может содержать более одного элемента. Графический интерфейс, который я делаю, — это приложение с определениями; каждый заголовок — это словарь, а каждая запись — одно определение (для некоторых слов существует несколько определений).

Код пока:

    def printDictToFrame(self,results_list):
        txt = tk.Text(self.SEARCH_RESULTS_FRAME,width = 34,height=20,pady=5,padx=2,background='#d9d9d9',relief=RIDGE)
        txt.place(x=10,y=10)
            for r_list in results_list:
            header = r_list[0]
            entry = r_list[1]
            txt.insert(tk.END, "{}\n".format(header.center(25,"*")))
                for single_result in entry:
                    txt.insert(tk.END,single_result+"\n")

Я сделал импровизированный «заголовок», используя .center. Если возможно, я бы хотел, чтобы заголовки также были центрированы.

Чтобы уточнить, такой текст, как «三省堂 スーパー大辞林», должен быть выделен жирным шрифтом и располагаться по центру, а запись под ним должна быть обычным текстом. Этот шаблон должен применяться для каждой комбинации заголовка/входа.

Также обратите внимание: в каждой записи может быть более одного элемента." - пожалуйста, приведите пример. Ваше описание немного расплывчато. Кроме того, будет ли каждый первый элемент в списке (например: "header1", "header2") уникальным или несколько элементов в списке потенциально будут использовать одни и те же теги?

Bryan Oakley 24.12.2020 00:25

Я прошу прощения. Каждый элемент — это просто строка. Заголовки будут иметь те же теги, что и записи (имеется в виду, что есть два типа тегов, заголовки и записи).

Steak 24.12.2020 11:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете присвоить строке заголовка тег и использовать tag_config(), чтобы центрировать строку и использовать полужирный шрифт.

Ниже приведен пример:

import tkinter as tk

root = tk.Tk()

txt = tk.Text(root, width=34, height=20, pady=5, padx=2, bg = "#d9d9d9", relief=tk.RIDGE)
txt.pack(padx=10, pady=10)

# line with tag "header" will be centered and using bold font
txt.tag_config("header", justify = "center", font=(None,10,"bold"))

results_list = [
  ["header1", ["entry 1"]],
  ["三省堂 スーパー大辞林", ["entry 2.1", "entry 2.2"]]
]

for header, entries in results_list:
  txt.insert(tk.END, "{}\n".format(header), "header") # associate header with tag "header"
  for single_result in entries:
    txt.insert(tk.END, "{}\n".format(single_result))

root.mainloop()

И результат:

Другие вопросы по теме