有什么方法可以将 '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()
所以让我们分解一下。
首先,我使用了不同的数据结构。在上面的示例中,我们有 list
个 dictionary
。这是在 Python.
中获取 "database like" 结构的一种非常典型的方法
然后我使用不同的方法来实际调用搜索,选择在 Entry
小部件中分配给 textvariable
的 variable
上使用绑定。这意味着每次 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
中的第二个值设置为我们正在循环的字典的值键匹配标识符变量的文本。
以上实现了我认为你想要的,你只需要修改你的数据格式即可。
目的是进入 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()
所以让我们分解一下。
首先,我使用了不同的数据结构。在上面的示例中,我们有 list
个 dictionary
。这是在 Python.
然后我使用不同的方法来实际调用搜索,选择在 Entry
小部件中分配给 textvariable
的 variable
上使用绑定。这意味着每次 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
中的第二个值设置为我们正在循环的字典的值键匹配标识符变量的文本。
以上实现了我认为你想要的,你只需要修改你的数据格式即可。