Мой код заключается в следующем:: < /p>
import sqlite3
import pandas as pd
import tkinter as tk
from tksheet import Sheet
from tkinter import messagebox
# Connect to SQLite database
conn = sqlite3.connect("your_ledger.db")
cursor = conn.cursor()
# Load joined data from Journal, Ledger, Fund, and Chart
def load_data():
query = """
SELECT
Ledger.Id AS LedgerId,
Journal.Id AS JournalId,
Journal.User_date,
Journal.Description,
Journal.Posted,
Ledger.Amount,
Fund.Id AS Fund_Id,
Fund.Name AS Fund_Name,
Chart.Id AS Account_Id,
Chart.Name AS Account_Name
FROM Ledger
JOIN Journal ON Ledger.Tran_id = Journal.Id
LEFT JOIN Fund ON Ledger.Fund_Id = Fund.Id
LEFT JOIN Chart ON Ledger.Account_Id = Chart.Id
WHERE Journal.Deleted = 0
"""
df = pd.read_sql_query(query, conn)
return df
# Save updated data from sheet to DB in one transaction
def save_data():
try:
new_data = pd.DataFrame(sheet.get_sheet_data(), columns=columns)
with conn: # Transaction context
for _, row in new_data.iterrows():
# Update Journal
conn.execute("""
UPDATE Journal
SET User_date = ?, Description = ?, Posted = ?
WHERE Id = ?
""", (row['User_date'], row['Description'], int(row['Posted']), row['JournalId']))
# Update Ledger
conn.execute("""
UPDATE Ledger
SET Amount = ?, Fund_Id = ?, Account_Id = ?
WHERE Id = ?
""", (row['Amount'], row['Fund_Id'], row['Account_Id'], row['LedgerId']))
messagebox.showinfo("Success", "Changes saved successfully.")
except Exception as e:
messagebox.showerror("Error", str(e))
# GUI setup
root = tk.Tk()
root.title("Ledger Entry Form")
df = load_data()
columns = df.columns.tolist()
sheet = Sheet(root,
data=df.values.tolist(),
headers=columns)
sheet.pack(expand=True, fill="both")
save_button = tk.Button(root, text="Save Changes", command=save_data)
save_button.pack(pady=10)
root.mainloop()
< /code>
Как видите, я загружаю запрос базы данных в файл данных, а затем в лист. Когда кнопка нажимается, лист преобразуется в файл данных, а затем база данных обновляется с его содержанием < /p>
Таблица вообще не отвечает на щелчки мыши вообще. Я попытался спросить Copilot, который предложил мне установить редактируемый True в конструкторе листа. Это не сработало. Затем он предложил включить привязки в листе, показанном в моем коде. Это тоже не сработало. Я в растерянности и не понимаю. Не могли бы вы мне помочь? Это не редактируемый = true arg; Все еще не сохранение, когда я нажимаю кнопку:-< /p>
import sqlite3
import pandas as pd
import tkinter as tk
from tksheet import Sheet
from tkinter import messagebox
# Connect to SQLite database
conn = sqlite3.connect("your_ledger.db")
cursor = conn.cursor()
# Load joined data from Journal, Ledger, Fund, and Chart
def load_data():
query = """
SELECT
Ledger.Id AS LedgerId,
Journal.Id AS JournalId,
Journal.User_date,
Journal.Description,
Journal.Posted,
Ledger.Amount,
Fund.Id AS Fund_Id,
Fund.Name AS Fund_Name,
Chart.Id AS Account_Id,
Chart.Name AS Account_Name
FROM Ledger
JOIN Journal ON Ledger.Tran_id = Journal.Id
LEFT JOIN Fund ON Ledger.Fund_Id = Fund.Id
LEFT JOIN Chart ON Ledger.Account_Id = Chart.Id
WHERE Journal.Deleted = 0
"""
df = pd.read_sql_query(query, conn)
return df
# Save updated data from sheet to DB in one transaction
def save_data():
try:
new_data = pd.DataFrame(sheet.get_sheet_data(), columns=columns)
with conn: # Transaction context
for _, row in new_data.iterrows():
# Update Journal
conn.execute("""
UPDATE Journal
SET User_date = ?, Description = ?, Posted = ?
WHERE Id = ?
""", (row['User_date'], row['Description'], int(row['Posted']), row['JournalId']))
# Update Ledger
conn.execute("""
UPDATE Ledger
SET Amount = ?, Fund_Id = ?, Account_Id = ?
WHERE Id = ?
""", (row['Amount'], row['Fund_Id'], row['Account_Id'], row['LedgerId']))
messagebox.showinfo("Success", "Changes saved successfully.")
except Exception as e:
messagebox.showerror("Error", str(e))
# GUI setup
root = tk.Tk()
root.title("Ledger Entry Form")
df = load_data()
columns = df.columns.tolist()
sheet = Sheet(root,
data=df.values.tolist(),
headers=columns,
editable=True) # Ensure cell editing is enabled
sheet.enable_bindings(("single_select", # Allow single cell selection
"edit_cell" # Enable cell editing
)) # Right-click popup menu
sheet.pack(expand=True, fill="both")
save_button = tk.Button(root, text="Save Changes", command=save_data)
save_button.pack(pady=10)
root.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/796 ... be-able-to
Я использую Panda и TKSheet для создания таблицы книг, которую я хочу иметь возможность редактировать, нажав на ячейку. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение