目的是进入罗纳德并获取
内的所有信息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;
答案 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()
所以让我们打破这个。
首先,我使用不同的数据结构。在上面的示例中,我们有list
个dictionary
个。这是在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匹配标识符变量的文本。
以上内容实现了您想要的想法,您只需将数据修改为格式。