我对编程还很陌生,基本上我不知道自己在做什么。
我正在尝试制作一个简单的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”。
我在做什么错了?
答案 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方法,它也会写空字符串。