Tkinter:基于列表中位置的文本样式

Tkinter: Text styling based on location in list

请注意我是 Tkinter 的新手。我也查看了文本标签,但我不确定在这种情况下如何应用它。

我想根据文本在列表(实际上是列表的列表)中的位置更改文本的样式。

“results_list”的结构是:

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

我希望每个“header”都具有与条目不同的字体样式。我不确定如何执行此操作/在哪里可以找到更多信息(我已尝试阅读文档,但我无法弄清楚)。另请注意:每个条目中可能包含多个元素。我正在制作的 GUI 是一个带有定义的应用程序;每个 header 是一个字典,每个条目都是一个定义(对于某些单词,有多个定义)。

到目前为止的代码:

    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 做了一个临时的“header”。如果可能的话,我希望 headers 也居中。

需要说明的是,“三省堂スーパー大辞林”等文字应为粗体且居中,而下方的条目应为常规文字。这种模式应该适用于每个 header/entry 组合。

您可以为 header 行 分配一个标记并使用 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()

结果: