Python: вставка значения TextBox в базу данных SQLite

Я пытаюсь извлечь содержимое TextBox и вставить его в базу данных SQLite. Я использую модуль guizero.

Я написал этот скрипт Python контрольная работа

from guizero import App, PushButton,TextBox, Text,Box
import sqlite3

global x 
global name

def insertVaribleIntoTable(x):
    try:
        sqliteConnection = sqlite3.connect('DB')
        cursor = sqliteConnection.cursor()
        cursor.execute('''INSERT INTO employee VALUES (?)''',(x,))
        sqliteConnection.commit()

        cursor.execute('''SELECT emp_name FROM employee''')
        print("database content : \n")
        print(cursor.fetchall())
        cursor.close()

    except sqlite3.Error as error:
        print("Failed to insert Python variable into sqlite table", error)
    finally:
        if sqliteConnection:
            sqliteConnection.close()

def when_clicked():
    print(name)
    strname = str(name)
    print(strname)
    insertVaribleIntoTable(strname)
    name.clear()

app = App(title = "Registration")

message = Text(app, text = "Registration")
entrybox = Box(app, width=185, height='fill')
Text(entrybox, text='Name ', align='left')
name = TextBox(entrybox, align='left', width=185)
button = PushButton(app, text = "Add", command=when_clicked)

app.display()

Теперь в TexyBox, когда я вставляю пользовательAA и нажимаю кнопку «Добавить», я получаю этот вывод

database content :
[('User1',), ('User2',), ('User3',), ("[TextBox] object with text 'userAA'",)]

В то время как ожидаемый результат

database content :
[('User1',), ('User2',), ('User3',), ('userAA',)]

Кто-нибудь знает, как решить эту проблему?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, у вас проблема с переменной name. Это экземпляр класса TextBox, который наследует свой __str__ метод по цепочке: Component -> Widget -> TextWidget -> TextBox.

Это выглядит так:

def __str__(self):                                                                                                                                                                                          
    return self.description

Внутри TextBox класса:

@property
def description(self):
    """
    Returns the description for the widget.
    """
    return "[TextBox] object with text '{}'".format(self.value)

Вы можете изучить это здесь: https://github.com/lawsie/guizero/tree/master/guizero

Поэтому я думаю, что вы должны использовать что-то вроде этого:

def when_clicked():
    print(name)
    strname = name.value  # str(name) will call name.descirption
    print(strname)
    insertVaribleIntoTable(strname)
    name.clear()

Большое спасибо за ваш ответ, теперь я получаю эту ошибку TypeError: 'str' object is not callable

ShZnd 04.05.2022 22:57

Где вы получаете эту ошибку? Можете ли вы дать больше информации, трассировку или что-то еще?

var211 04.05.2022 23:02

Хорошо, я отредактирую сообщение и добавлю детали ошибки

ShZnd 04.05.2022 23:04

Вы должны проверить свой код, я попробовал именно ваш пример и изменил только name.value; результат был: [('asdfasd',)]. Так что все выглядит нормально.

var211 04.05.2022 23:14

О, мой плохой, ошибка была из-за того, что я неправильно скопировал часть кода, которую вы предложили. Я проверил его сейчас, и все работает отлично, и я получил ожидаемый результат. Большое вам спасибо за вашу помощь !

ShZnd 04.05.2022 23:15

Другие вопросы по теме