有没有办法可以插入罗纳德'进入StudentEntry?

时间:2017-11-09 04:09:57

标签: tkinter python-3.6

目的是进入罗纳德并获取

内的所有信息

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条目的值

并使用insert函数将值放在Result条目

让我直接插入我在studententry条目中放置的内容

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

返回结果条目,而不是获得Ronald&#39;

2 个答案:

答案 0 :(得分:0)

我会建议一本字典。一个非常简单的例子

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)

答案 1 :(得分:0)

好的,我想在阅读完这个问题并the one you asked earlier之后,我明白了你在这里尝试做些什么。你有一个&#34;数据库&#34; (各种各样)的人都拥有自己的元数据,你想要一种在tkinter窗口中显示它的方法。

这是相对简单的,我认为你认真,认真过度使代码中的事情变得复杂。

以下示例执行我认为您需要的内容:

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中获取&#34;数据库(如#34; 结构)的一种非常典型的方式。

然后我使用不同的方法实际调用搜索,选择在variable小部件中分配给textvariable的{​​{1}}上使用绑定。这意味着每次Entry窗口小部件写入Entry时都会更新,每当更新variable时,我们都会收到variable函数的回调,此部分可以是如下所示:

callback()

接下来我基本上在2宽3高网格中创建了6个 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 小部件。左侧的Label用作标识符,右侧的Label为空白以供日后使用。这是非常标准的tkinter内容,在本网站上已被覆盖了太多次。

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

Label

for i in self.data: 循环只会遍历每个字典,并将其分配给for

i

if i["Name"] == self.var.get(): 语句说如果if小部件的值与我们当前正在循环的词典中的Entry键的值相等真

如果上面的检查回复为Name,我们会循环显示True,其中包含我们之前生成的self.labels小部件。

Label

最后,我们将 c[1].configure(text=i[c[0].cget("text")]) (空白tuple窗口小部件)的每个list中的第二个值设置为我们循环的词典的值。 key匹配标识符变量的文本。

以上内容实现了您想要的想法,您只需将数据修改为格式。