无法编码对象:<tkinter.stringvar object =“”> pymongo

时间:2019-03-25 07:35:48

标签: python mongodb tkinter pymongo

我对编程还很陌生,基本上我不知道自己在做什么。

我正在尝试制作一个简单的UI,可以接受输入并将其写入mongodb。

import pymongo
from tkinter import *
from tkinter import ttk

class Input:

    def __init__(self, root,):

        self.myclient = pymongo.MongoClient("mongodb://localhost:27017/")

        self.mydb = self.myclient["mydatabase"]

        self.mycol = self.mydb["input"]

        title_label = Label(root, text="input")

        title_label.grid(row=0, column=0, padx=10, pady=10, sticky=W)

        self.input_value = StringVar(root, value="")

        self.input = ttk.Entry(root, textvariable=self.input_value)

        self.input.grid(row=0, column=1, padx=10, pady=10, sticky=W)

        self.submit_button = ttk.Button(root,
                                        text="Submit",
                                        command=self.submit())
        self.submit_button.grid(row=1, column=0,
                                padx=10, pady=10, sticky=W)

    def submit(self):
        entry = {"input": self.input_value}
        self.mycol.insert(entry)


root = Tk()

In = Input(root)

root.mainloop()

尝试运行此命令时,我会得到

bson.errors.InvalidDocument: Cannot encode object: <tkinter.StringVar object at 0x000001EC62343908>

我尝试将input_value转换为“普通”字符串

self.input_value = str(StringVar(root, value=""))

这样做可以使程序运行,但是无论我在输入字段中输入什么内容,它都会向数据库中写入“ PY_VAR0”。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

感谢尼尔·伦恩。

entry = {"input": self.input_value.get()}

现在正在使用get方法工作。

我发现的另一个问题是我写的

self.submit_button = ttk.Button(root,
                                text="Submit",
                                command=self.submit())

实际上需要是

self.submit_button = ttk.Button(root,
                                text="Submit",
                                command=self.submit)

在self.submit上没有括号。 这些导致该功能在程序开始时执行,因此即使使用get方法,它也会写空字符串。