有什么方法可以将 'Ronald' 插入 StudentEntry?

Is There A Way i can insert 'Ronald' Into StudentEntry?

目的是进入 Ronald 并获取

中的所有信息

Ronald Variable,使用方法 "INSERT" 来实现这一点,我卡住了

正在寻找有关如何执行此操作的建议,

#the class/object
class Jurystudent:
    def __init__(self, gpa , First , Last, NUMOFCLASSES,gradelvl):
        self.gpa = gpa
        self. First = First
        self.Last = Last
        self.Numberofclasses = NUMOFCLASSES
        self.gradelvl = gradelvl
    def __str__(self):
        return str(self.gpa)+","+str(self.First)+ ","+str(self.Last)+","+str(self.Numberofclasses)+ ","+str(self.gradelvl)

#The function that inserts the result being searched into the result box

def insert():


Ronald = Jurystudent(4.0,'Ronald', 'Colyar' , 6 , 10)

print(Ronald)





#Gui
import tkinter
from tkinter import *
from tkinter import ttk
#Window 
root = Tk()

#Entry 
StudentEntry=ttk.Entry(root)
StudentEntry.grid(row = 1 , column = 0 , sticky =W)

#Button
SearchButton=ttk.Button(root , text ='Search')
SearchButton.grid(row = 1 , column= 1 , sticky =W)
SearchButton.bind('<Button-1>', insert)
#Result
Result  =ttk.Entry(root)

Result.grid(row= 1 , column = 2 , sticky= W )

这是我可以搜索我学校学生信息的一种方式。

我试过使用 .get 函数来获取 studententry 条目的值

并使用插入函数将值放入结果条目,它

让我直接插入学生条目中的内容,

例如,如果我将 Ronald.gpa 放入条目中,我想得到 4.0

在 return 进入结果条目,而不是我得到 'Ronald'

我会推荐一本字典。一个非常简单的例子

class Jurystudent:
    def __init__(self, gpa , First , Last, NUMOFCLASSES,gradelvl):
        self.gpa = gpa
        self. First = First
        self.Last = Last
        self.Numberofclasses = NUMOFCLASSES
        self.gradelvl = gradelvl

dict_of_instances={}
Ronald = Jurystudent(4.0,'Ronald', 'Colyar' , 6 , 10)
dict_of_instances["Ronald"]=Ronald
dict_of_instances["George"] = Jurystudent(3.2,'George', 'Washington' , 5 , 11)

## simulate "George" entered in Entry and
## "Ronald" entered as another, separate request
for student in ["George", "Ronald"]:
    print("\nPrinting info for", student)
    first=dict_of_instances[student].First
    last=dict_of_instances[student].Last
    print("     ", first, last)
    num_classes=dict_of_instances[student].Numberofclasses
    print("     ", num_classes, dict_of_instances[student].gradelvl)

好的,在阅读了这个问题和 the one you asked earlier 之后,我想我明白你想在这里做什么了。你有 "database"(各种各样的)人,他们都有自己的元数据,你想要一种在 tkinter window.[=39 中显示它的方法=]

这相对简单,我认为您是认真的,认真地 过度复杂化了您的代码。

下面的例子做了我认为你需要的:

from tkinter import *

root = Tk()

class App:
    def __init__(self, root):
        self.root = root
        self.data = [{"Name": "Alpha", "Var1": "3", "Var2": "1", "Var3": "4"},
                 {"Name": "Beta", "Var1": "1", "Var2": "5", "Var3": "9"},
                 {"Name": "Charlie", "Var1": "2", "Var2": "6", "Var3": "6"}
            ]
        self.var = StringVar()
        self.var.trace("w", self.callback)
        self.entry = Entry(self.root, textvariable=self.var)
        self.entry.grid(row=0, column=0, columnspan=2)
        self.labels = [(Label(self.root, text="Name"),Label(self.root)),(Label(self.root, text="Var1"),Label(self.root)),(Label(self.root, text="Var2"),Label(self.root)),(Label(self.root, text="Var3"),Label(self.root))]
        for i in range(len(self.labels)):
            self.labels[i][0].grid(row = i+1, column=0)
            self.labels[i][1].grid(row = i+1, column=1)
    def callback(self, *args):
        for i in self.data:
            if i["Name"] == self.var.get():
                for c in self.labels:
                    c[1].configure(text=i[c[0].cget("text")])

App(root)
root.mainloop()

所以让我们分解一下。

首先,我使用了不同的数据结构。在上面的示例中,我们有 listdictionary。这是在 Python.

中获取 "database like" 结构的一种非常典型的方法

然后我使用不同的方法来实际调用搜索,选择在 Entry 小部件中分配给 textvariablevariable 上使用绑定。这意味着每次 Entry widget 被写入一个 variable 被更新,每当这个 variable 被更新时我们得到一个回调到 callback() 函数,这部分可以是如下所示:

        self.var = StringVar() #we generate a tkinter variable class here
        self.var.trace("w", self.callback) #we setup the callback here
        self.entry = Entry(self.root, textvariable=self.var) #and we assign the variable to the Entry widget here

接下来我基本上在 2 宽 3 高的网格中创建 6 个 Label 小部件。左边的 Label 作为标识符,右边的 Label 留空以备后用。这些都是非常标准的 tkinter 内容,在本网站上已被多次提及。

最后也是最难理解的部分是实际的回调,所以让我们逐行看一下:

for i in self.data:

这个 for 循环简单地循环遍历每个字典,将其分配给 i

    if i["Name"] == self.var.get():

这个 if 语句说 如果 Entry 小部件的值等于我们当前正在循环的字典中 Name 键的值通过 THEN True.

如果上述检查返回 True,我们将遍历 self.labels,其中包含我们之前生成的 Label 小部件。

                    c[1].configure(text=i[c[0].cget("text")])

最后,我们将 list(空白 Label 小部件)的每个 tuple 中的第二个值设置为我们正在循环的字典的值键匹配标识符变量的文本。

以上实现了我认为你想要的,你只需要修改你的数据格式即可。