【问题标题】:Is There A Way i can insert 'Ronald' Into StudentEntry?有没有办法可以在 StudentEntry 中插入“Ronald”?
【发布时间】:2017-11-09 04:09:56
【问题描述】:

目的是进入Ronald,获取里面的所有信息

Ronald 变量,使用“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 条目的值

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

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

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

返回结果条目,而不是我得到'Ronald'

【问题讨论】:

  • “我被卡住了” - 到底是什么?你试过什么?请编辑您的问题以提出具体问题并解释您的尝试。
  • 我尝试使用 .get 函数来获取 studententry 条目的值,并使用 insert 函数将值放置到 Result 条目中,它让我可以直接插入我在studententry 条目,例如,如果我将 Ronald.gpa 放入条目中,我希望在结果条目中得到 4.0 作为回报,而不是得到 'Ronald'
  • Ronald 是实例,类中的变量是实例对象。打印(Ronald.First、Ronald.Last)等
  • 我想做的是找到一个将这些值放入结果条目的灵魂,我知道如何打印它们,我只是不知道将它们插入结果条目中的正确方法,我在我的类中定义了 str 方法,这使我能够打印 ronald 的所有属性,只需打印 ronald
  • 按钮必须绑定到 get() "Ronald" 的函数,然后将 Ronald 实例中的信息插入 StudentEntry 条目(参见 get() 并插入()在上面的链接,以及如何将按钮单击连接到按钮 tkinterbook 页面上的功能)。

标签: tkinter python-3.6


【解决方案1】:

好的,在阅读了这个问题和the one you asked earlier 之后,我想我明白你在这里想要做什么。你有一个“数据库”(各种各样的)人,他们都有自己的元数据,你想要一种在 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 和 dictionarys。这是在 Python 中获取 “类似数据库” 结构的非常典型的方式。

然后我使用不同的方法来实际调用搜索,选择在Entry 小部件中使用分配给textvariable 的variable 绑定。这意味着每次将Entry 小部件写入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 小部件。左侧的Labels 用作标识符,右侧的Labels 留空以备后用。这些都是非常标准的 tkinter 东西,在这个网站上已经讨论了太多次了。

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

for i in self.data:

这个for 循环只是循环遍历每个字典,将其分配给i。

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

这个if 语句表示如果Entry 小部件的值等于我们当前循环遍历的字典中Name 键的值,则为真。。 p>

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

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

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

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

【讨论】:

    【解决方案2】:

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

    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)
    

    【讨论】:

    • 这只会打印到控制台,我正在尝试搜索“Ronald”变量,当我点击提交时,“4.0 , first ,last ect”应该返回到结果条目中。在我的 GUI 窗口中, 这个程序假设是一个信息搜索器,我希望能够为我的学校创建一个新系统来搜索学生姓名,并获取该学生的信息
    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2020-12-04
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多