Невозможно закодировать объект: <tkinter.StringVar object> pymongo - PullRequest
0 голосов
/ 25 марта 2019

Я довольно новый для программирования.

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 Ответ

1 голос
/ 25 марта 2019

Спасибо, Нил Ланн.

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.

...