首页 > 解决方案 > python与sqlite3 db一起工作,从db中保存、更新和检索文本

问题描述

前一天我一直在尝试解决这个问题。并且几乎成功了。但是,我仍然没有得到明确的答案 - 为什么下一个代码不起作用?

import sqlite3
from tkinter import *
from tkinter import ttk
root = Tk()
text = Text(root)
text.pack()
con = sqlite3.connect(':memory:')
c = con.cursor()
c.execute("CREATE TABLE t1 (name)")
c.execute("INSERT INTO t1 VALUES (?)", ('TEST',))
con.commit()

c.execute("SELECT * FROM t1")
text_ = c.fetchall()
text.insert(INSERT, text_)
text.tag_add('one', '1.0', '1.3')
text.tag_config('one', background='blue')

text_get = text.get('1.0', 'end')


c.execute("UPDATE t1 SET name=?", (text_get,))
con.commit()


text.insert(INSERT, '\n')

c.execute("SELECT * FROM t1")
text_ = c.fetchall()
text.insert(INSERT, text_)


root.mainloop()

结果是下一个:保存到 db 之前的 TEXT - 在更新到 db 并取回它之后具有背景颜色 TEXT - 没有。有什么办法让它工作吗?

标签: pythontkintersqlite

解决方案


Text.get()方法只返回纯文本,但不返回任何标签的信息。

您必须使用其他方法来获取有关标签的信息:

>>> text.tag_names()
('sel', 'one')
>>> text.tag_cget('one', 'background')
'blue'
>>> text.tag_ranges('one')
(<textindex object: '1.0'>, <textindex object: '1.3'>)

该信息需要存储在其他一些列中。或者,将格式代码插入到数据库中保存的文本中。


推荐阅读