首页 > 解决方案 > 从获取名称到列表中的 Tkinter 信息

问题描述

我目前正在编写一个代码,它使用 Tkinter 制作的 GUI。我的问题是我想创建一个脚本: A. 打开一个窗口(我这样做了,它会循环),如果窗口可以保持打开状态并转换为自身的空白版本。B:把Get Name中的所有名字放到一个列表中,塞进一个dataframe中进行处理。我写了重要的代码。

这是我的尝试

from tkinter import *
class Name:
    def __init__(self):
        window = Tk()
        window.title('Names to be processed please: ')
        frame1 = Frame(window)
        frame1.pack()
        label = Label(frame1, text = "Enter a name: ")
        self.name = StringVar()
        self.v1 = IntVar()
        self.v2 = IntVar()
        entryname = Entry(frame1, text = self.name)
        btGetName = Button(frame1, text = 'Get Name', command = self.processButton)
        btFinished = Checkbutton(frame1, text = 'Finished',
                                 variable = self.v1, command = self.finishedButton)
        btNotFinished = Checkbutton(frame1, text = 'Not Finished',
                                 variable = self.v2, command = self.unfinishedButton)
        label.grid(row = 1, column = 2)
        btGetName.grid(row = 1, column = 3)
        btFinished.grid(row = 2, column = 2)
        btNotFinished.grid(row = 2, column = 3)
        text = Text(window)
        text.pack()
        window.mainloop()
    def processButton(self):
        name = self.name.get()
        return name
    def finishedButton(self):
        a = self.v1.get()
        return a
    def unfinishedButton(self):
        b = (1 if self.v2.get() == 1 else 0)
        return b
obj = Name()
name = []
while obj.finishedButton() != 1:
    Name()
    for i in obj.processButton():
        name.append(i)
print(name)

常见的错误是我得到一个空白列表。谢谢你的帮助。

标签: pythonpython-3.xtkinter

解决方案


代码中的简单错误。您要确保您实际上在布局中包含 entryname,我在您的代码中没有看到。entryname.grid(row = 3, column = 1)通过在其余网格线之后包含该行,我将 entryname 添加到布局的底部。

添加此行应该可以解决您的问题。然后我就可以self.name.get()在函数中打印出来了processButton

更新:如果要将用户输入的名称保存到列表中,可以在函数中执行此操作processButton。请参阅下面的代码以了解如何执行此操作。从这里,您可以从此列表中创建一个数据框。

def processButton(self):
        name_list = []
        name = self.name.get()
        name_list.append(name)
        print('Names list consists of: ', name_list)
        return name_list

推荐阅读