【发布时间】:2021-12-20 07:08:59
【问题描述】:
在下面的代码中,我将 value1 和 value2 保存到 sqlite3 数据库中,并将 txt_ 保存在名为 data 的文件夹中。 我在这里想要实现的是,当我重新运行程序并打开文件时,txt_ 文件应该在文本区域中打开,其中包含我保存时添加的行。当我单击添加按钮时, value1 和 value2 应该被更新并且新创建的行应该在下一行。 让我知道我的方法是否正确,如果不正确,请告诉我更好的方法。
代码:
from tkinter import *
from tkinter import messagebox
import sqlite3
import os
root = Tk()
root.geometry('400x400')
var_e = StringVar(None)
def create_my_db():
conn = sqlite3.connect(database=r'my db.db')
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS "myLogs"
(
"int_value" INTEGER,
"float_value" REAL
)
""")
conn.commit()
create_my_db()
def add_lbl():
global value1, value2
value1 += 1
value2 += 1
sample = f'This is line {value1} which has value of {value2}\n'
txt_.insert(END, sample)
def save():
conn = sqlite3.connect(database=r'my db.db')
cur = conn.cursor()
cur.execute("""INSERT INTO myLogs VALUES (?,?)""",
(
value1,
value2
)
)
conn.commit()
# labels to check if the values are stored in the database
values_lbl.config(text=f'value 1 is [ {value1} ] & value 2 is [ {value2} ]')
def save_txt():
file_txt = open(f'data/{value1}.txt', 'w')
file_txt.write(txt_.get(1.0, END))
file_txt.close()
messagebox.showinfo('SAVED', 'Data saved to the database.')
def open_():
for txt_file in os.listdir("data/"):
if txt_file.split('.')[0] == f'{var_e.get()}':
file_ = open(f"data/{txt_file}", "r")
for i in file_:
txt_.insert(END, i)
file_.close()
value1 = 0
value2 = 0.9
values_lbl = Label(root, text=f'value 1 is [ {value1} ] & value 2 is [ {value2} ]')
values_lbl.pack()
btn_frame = Frame(root)
btn_frame.pack()
btn_add = Button(btn_frame, text='Add', command=add_lbl)
btn_add.pack(side=LEFT)
e = Entry(btn_frame, textvariable=var_e)
e.pack(side=LEFT)
btn_open = Button(btn_frame, text='Open', command=open_)
btn_save = Button(btn_frame, text='Save', command=lambda:[save(), save_txt()])
btn_open.pack(side=LEFT)
btn_save.pack(side=LEFT)
txt_ = Text(root)
txt_.pack(fill=BOTH, expand=True)
root.mainloop()
【问题讨论】:
-
为什么你认为这不起作用?程序运行时会做什么?
-
重新运行程序时不知道如何更新 value1 和 value2。我附上了图片,我在其中添加了三行,然后保存了它。然后我重新运行程序并打开文件。但 value1 和 value2 分别重置为 0 和 0.9。第 4 行应该是“这是第 4 行,值为 4.9”
-
您需要在
open_()中更新value1和value2。 -
@acw1668,是的,你是对的,但我不知道怎么做。能给我看看吗?
-
我想知道你为什么不知道你是怎么在
add_lbl()里面做过类似的事情的。
标签: python-3.x sqlite tkinter integer