pymongo,python,mongodb,tkinter,pymongo"/>

首页 > 解决方案 > 无法编码对象: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”写入数据库。

我究竟做错了什么?

标签: pythonmongodbtkinterpymongo

解决方案


谢谢尼尔伦恩。

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 方法它也会写入空字符串。


推荐阅读