Я пытаюсь извлечь содержимое 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',)]
Кто-нибудь знает, как решить эту проблему?
Похоже, у вас проблема с переменной 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()
Где вы получаете эту ошибку? Можете ли вы дать больше информации, трассировку или что-то еще?
Хорошо, я отредактирую сообщение и добавлю детали ошибки
Вы должны проверить свой код, я попробовал именно ваш пример и изменил только name.value
; результат был: [('asdfasd',)]
. Так что все выглядит нормально.
О, мой плохой, ошибка была из-за того, что я неправильно скопировал часть кода, которую вы предложили. Я проверил его сейчас, и все работает отлично, и я получил ожидаемый результат. Большое вам спасибо за вашу помощь !
Большое спасибо за ваш ответ, теперь я получаю эту ошибку
TypeError: 'str' object is not callable