0

我正在尝试使用 tkinter 的 .grid 组织来制作一个比较程序,比较列表中不同项目的质量。我的目标是在每行的第一列中列出每个项目的 OptionMenu,然后根据从 OptionMenu 中选择的项目填充行的其余部分。稍后我将在右侧添加更多单元格以比较质量,但我坚持让网格看起来正确。目前,我有一个打开的窗口,外部描述符标签填充到正确的位置,但我无法弄清楚如何获取有关在选项菜单中选择的项目的详细信息,以便在它的行中很好地排列。基于选项菜单选择的所有内容都显示在窗口底部,并且在第一次选择后不会改变。我能做些什么来解决这个问题?

import tkinter as tk
from tkinter import *

window = tk.Tk()
frm_form = tk.Frame()
frm_form.pack()

labels = ["Name", "QualA", "QualB", "QualC", "QualD"]

for idx, text in enumerate(labels):
    label = tk.Label(master=frm_form, text=text)
    label.grid(row=0, column=idx + 1, sticky="w")

for i in range(1, 4):
    label = tk.Label(master=frm_form, text=i)
    label.grid(row=i, column=0, stick="e")

names = ["Bob", "Paul", "Steve", ]
Bob = ["Bob", "qual1", "qual2", "qual3", "qual4", ]
Paul = ["Paul", "qual5", "qual6", "qual7", "qual8", ]
Steve = ["Steve", "qual9", "qual10", "qual11", "qual12", ]

for i in range(1, 4):
    def selected(event):
        for j in range(2, 6):
            if clicked.get() == 'Bob':
                person = tk.Label(frm_form, text=Bob[j-1])
                person.grid(row=i, column=j)
            elif clicked.get() == 'Paul':
                person = tk.Label(frm_form, text=Paul[j-1])
                person.grid(row=i, column=j)
            elif clicked.get() == 'Steve':
                person = tk.Label(frm_form, text=Steve[j-1])
                person.grid(row=i, column=j)
    clicked = StringVar()
    clicked.set(names[0])

    drop = tk.OptionMenu(frm_form, clicked, *names, command=selected)
    drop.grid(row=i, column=1)

window.mainloop()

这是一个个人项目,是我第一次尝试使用 python 进行编码,所有这些都是基于多年前或两年前的编程课上的一些松散知识以及最近的一些 youtube 视频。因此,如果有一种更有效的方法来完成我的目标,我非常愿意接受建议。

4

0 回答 0