如何使用 for 循环和文本框为列表中的每个项目创建按钮?

时间:2021-04-22 14:58:13

标签: python user-interface tkinter

我正在 tkinter 中创建一个新窗口,需要在其中放入 2 个东西。首先,一个文本框,里面打印了一个列表中的元素。此列表包含年份,这些年份将与一些文本连接在一起打印。

其次,文本框下方有给定数量的按钮,这个数字是变化的,是文本框中打印年份的一个子集。按钮中的文本是年份,我想将所有按钮放在一行中,按钮的数量从 2 到 5 不等,具体取决于年份列表。

为此,我正在创建带有循环的按钮,但问题是由于顶部的文本框,它们的间距不太好。

enter image description here

我使用的部分代码是这样的

 top = Toplevel(root)
 canvas2 = Canvas(top, width=600, height=300)
 canvas2.pack()

 header = Frame(canvas2, width=700, height=275)
 header.grid(columnspan=18, rowspan=2, row=0)

 main_content = Frame(canvas2, width=700, height=275, bg="#14a4d6")
 main_content.grid(columnspan=18, rowspan=2, row=1)


 display_text_box("\n".join(map(str, list_years_rank + list_years_result)), 0, 1, canvas2)

 for i in range(len(list_years)):
    button = Button(canvas2, text=list_years[i], font=("shanti", 10), height = 1, width = 3)
    button.grid(column=i, row=1)

函数display_text_box如下:

def display_text_box(content, row, column, root):
    text_box = Text(root, height=6, width=50, padx=10, pady=10, fg="red")
    text_box.insert(1.0, content)
    text_box.tag_config("center", justify="center")
    text_box.tag_add("center", 1.0, "end")
    text_box.grid(column=column, row=row, padx = 25, pady = 25)

1 个答案:

答案 0 :(得分:0)

为按钮添加一个新框架,然后将按钮放在框架内。然后,您将能够独立于窗口中的网格来控制按钮的间距。