python - 无法编码对象: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”写入数据库。
我究竟做错了什么?
解决方案
谢谢尼尔伦恩。
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 方法它也会写入空字符串。
推荐阅读
- reactjs - 使用 react-router 以编程方式导航时,IE 抛出 DATACloneError
- python - Discord.Role 的格式
- python - 如何在函数中打印变量类类型的实际名称?
- spring - 使用 isEmpty 进行条件查询的子树意外结束
- java - 如何为以下查询创建 jpa 规范或条件查询的谓词
- javascript - “材料表” - 如何在每页添加更多行并修复渲染 - ReactJs
- google-earth-engine - 如何让 ee.Reducer.mean() 给我一个浮点数而不是二进制数?
- javascript - 如何将值从函数插入到变量javascript
- python - 在不干扰原始图像的情况下将灰色背景转换为白色背景
- oracle - 如何在触发器(Oracle)的帮助下将现有记录从父表移动到新创建的子表?