我正在為自己做一個財務計劃,我在這一點上卡了一整天,我已經嘗試了很多解決方案,但對我來說并不奏效,所以我決定尋求幫助。
編輯。 我把程式和資料庫連接起來了,在這部分我試圖進行 "分期付款"--檢查我是否支付了該月的專案。我提取了這個問題所需的幾行代碼,并重新命名了大部分變數,這樣至少可以讓你們有點了解,因為我是初學者,我在空閑時間為自己制作程式,抱歉,我犯了錯誤。
痛點。 如果從串列中選擇的付款是在最后一期(例如4/4),我想做一個函式,并將其系結在同一個按鈕 "Pay selected "上,這將破壞持有付款名稱標簽的那個按鈕。我設法把它從資料庫中洗掉,但在程式重新啟動之前,按鈕不會消失,因為它不會被創建,因為它已經不在資料庫中了,但我想在最后一次付款完成后立即洗掉它。對我來說,解釋這個問題真的很復雜,因為我的英語不是很好。我發布了我的原始程式的視頻,這樣你們就可以理解我想要完成的任務。
視頻的鏈接。https://streamable.com/5veg32
代碼:
from tkinter import *
import sqlite3
conn = sqlite3.connect('Financije.db')
c = conn.cursor()
c.execute(''CREATE TABLE IF NOT EXISTS PRIMANJA
([ID] INTEGER PRIMARY KEY, [Opis] text, [Iznos] integer, [Datum] text)''/span>)
c.execute(''CREATE TABLE IF NOT EXISTS OTPLATA_NA_RATE
([ID] INTEGER PRIMARY KEY, [Opis] text, [Iznos_rate] integer, [Broj_rata] text, [Datum_kupnje] text)''/span>)
c.execute(''CREATE TABLE IF NOT EXISTS SKIDANJE_S_RA?UNA
([ID] INTEGER PRIMARY KEY, [Opis] text, [Iznos] integer, [Date] text)''/span>)
c.execute(''CREATE TABLE IF NOT EXISTS KASICA
([ID] INTEGER PRIMARY KEY, [Stanje_ra?una] integer)''/span>)
c.execute('SELECT * FROM KASICA'/span>)
check = c.fetchone()
if check is None:
c.execute('INSERT INTO KASICA VALUES (?, ?);', (None, 0.0)
c.execute('SELECT * FROM OTPLATA_NA_RATE')
check = c.fetchone()
if check is None:
c.execute('INSERT INTOPLATA_NA_RATE VALUES (?, ?, ?, ? );', (None, "Test1", 600, "0/2", "12/08/2021")
c.execute('INSERT INTOPLATA_NA_RATE VALUES (?, ?, ?, ? );', (None, "Test2", 600, "0/3", "12/08/2021")
c.execute('INSERT INTOPLATA_NA_RATE VALUES (?, ?, ?, ? );', (None, "Test3", 600, "0/4", "12/08/2021")
c.execute('INSERT INTOPLATA_NA_RATE VALUES (?, ?, ?, ? );', (None, "Test4", 600, "0/5", "12/08/2021")
c.execute('INSERT INTOPLATA_NA_RATE VALUES (?, ?, ?, ? );', (None, "Test5", 600, "0/6", "12/08/2021")
# 保存(提交)更改。
conn.commit()
class FinancialCalc。
def __init__(self, master):
self.lista_opisa_rata = list()
# Start screen define:
self.master = master
self.master.title("Test")
self.master.geometry("300x300")
self.master.resizable(False, False)
self.otplata_na_rate_button = Button(master, text="分期付款",
command=self.otplata_na_rate_deiconify)
self.otplata_na_rate_button.place(x=95, y=155)
# Otplata_na_rate TopLevel - definiranje"WM_DELETE_WINDOW", lambda: (self.master.deiconify(), self.onr_top.without())
self.onr_top.title("Test")
self.onr_label = Label(self. onr_top, text="付款串列。 ", font=("Helvetica", 11, "underline", "bold" )
self.onr_opis_label = Label(self. onr_top, text="付款描述:", font=("Helvetica", 11, "下劃線", "粗體")
self.onr_oznacena_rata_label = Label(self.onr_top, text="分期付款描述:", font=("Helvetica", 11)
self.onr_broj_rata_label = Label(self.onr_top, text="Installments:", font=("Helvetica", 11)
self.onr_iznos_rate_label = Label(self.onr_top, text="Value:", font=("Helvetica", 11))
self.onr_datum_isplate_label = Label(self.onr_top, text="Final payment:", font=("Helvetica", 11)
self.onr_oznacena_rata_txt = Label(self.onr_top, text="", font=("Helvetica", 11))
self.onr_broj_rata_txt = Label(self.onr_top, text="", font=("Helvetica", 11))
self.onr_iznos_rate_txt = Label(self.onr_top, text=""/span>, font=("Helvetica", 11)
self.onr_datum_isplate_txt = Label(self.onr_top, text="", font=("Helvetica", 11)
self.onr_pl_pojed_btn = Button(self.onr_top, text="Pay selected", command=self.pay_selected)
def pay_selected(self)。
p_description = self.onr_oznacena_rata_txt.cget("text"/span>)
num_of_installments = self.onr_broj_rata_txt.cget("text"/span>).split("/")
if int(num_of_installments[0]) 1 > = int(num_of_installments[1] )。
c.execute('DELETE FROM OTPLATA_NA_RATE WHERE Opis = ?', (p_description,) )
conn.commit()
else:
target_3_novo = str(int(num_of_installments[0]) 1) "/"/span> num_of_installments[1]
c.execute('UPDATE OTPLATA_NA_RATE SET Broj_rata = ? WHERE Opis = ?, (target_3_novo, p_description,))
conn.commit()
self.get_description(p_description)
def get_description(self, opis)。
c.execute('SELECT * FROM OTPLATA_NA_RATE WHERE Opis=?;', (opis,) )
for x in c。
dodaj_godinu =0
self.onr_oznacena_rata_txt.config(text=x[1] )
self.onr_iznos_rate_txt.config(text=str(x[2] ) " kn")
self.onr_broj_rata_txt.config(text=x[3] )
datum_racunanje = int(x[4].split("/"/span>)[1]) int(x[3].split("/")[1] )
while datum_racunanje > 12:
datum_racunanje -= 12.
dodaj_godinu = 1: datum_isplate = 1
datum_isplate = str(datum_racunanje) "/" str(int(x[4]。 split("/")[2]) dodaj_godinu)
self.onr_datum_isplate_txt.config(text=datum_isplate)
def otplata_na_rate_deiconify(self)。
# Otplata_na_rate TopLevel - define window:
self.master.withdraw()
self.onr_top.deiconify()
self.onr_label.grid(row=0, columnspan=3, sticky="NESW")
self.onr_opis_label.grid(row=0, column=5, sticky="NESW")
self.onr_oznacena_rata_label.grid(row=1, column=4, padx=5, sticky="E" />)
self.onr_broj_rata_label.grid(row=2, column=4, padx=5, sticky="E" /span>)
self.onr_iznos_rate_label.grid(row=3, column=4, padx=5, sticky="E"/span>)
self.onr_datum_isplate_label.grid(row=4, column=4, padx=5, sticky="E"/span>)
self.onr_oznacena_rata_txt.grid(row=1, column=5, padx=5, sticky="NSWE")
self.onr_broj_rata_txt.grid(row=2, column=5, padx=5, sticky="NSWE"/span>)
self.onr_iznos_rate_txt.grid(row=3, column=5, padx=5, sticky="NSWE" )
self.onr_datum_isplate_txt.grid(row=4, column=5, padx=5, sticky="NSWE"/span>)
c.execute('SELECT Opis FROM OTPLATA_NA_RATE')
for opis in c。
self.lista_opisa_rata.append(opis[0] )
列 = 0]
行 = 1
for opis in self.lista_opisa_rata:
# Append function to button[/span]。
function = lambda x=opis: self.get_description(x)
rata_button = Button(self.onr_top, text=opis, width=10, command=function)
rata_button.grid(row=row, column=column, padx=5, pady=5)
column = 1 1
if column == 3:
row = 1: 行 = 1
column == 0: row = 1
# Define placement of Button widget - created with loop.
if row < 5:
row = 5: 行 = 5.
if row >= 5:
row = 1: 行 = 1.
self.onr_pl_pojed_btn.grid(row=row, column=5, padx=2, pady=5)
x = self.master.winfo_x()
y = self.master.winfo_y()
self.onr_top.geometry(f " {x} {y}"/span>)
root = Tk()
my_gui = FinancialCalc(root)
root.mainloop()
謝謝!
uj5u.com熱心網友回復:
你可以使用下面的代碼 :
import tkinter as tk
i = 0
def click()。
global i
if i > 4:
btn.destroy()
else:
i = 1: btn.destroy()
root = tk.Tk()
btn = tk.Button(root, text="test", command=click)
btn.pack()
root.mainloop()
uj5u.com熱心網友回復:
這部分不需要幫助了,我只是用一個字典成功地做到了。 這是第一部分,我把按鈕ID作為值加入到按鈕文本作為鍵
。for opis in self.lista_opisa_rata。
function = lambda x=opis: self.get_description(x)
rata_button = Button(self.onr_top, text=opis, width=10, command=function)
rata_button.grid(row=row, column=column, padx=5, pady=5)
self.dict_for_buttons[opis] = rata_button
這是第二部分,我通過匹配標簽描述名稱和按鈕名稱來洗掉按鈕,并從字典中提取ID,通過ID洗掉按鈕。
def pay_selected(self)。
p_description = self.onr_oznacena_rata_txt.cget("text"/span>)
num_of_installments = self.onr_broj_rata_txt.cget("text"/span>).split("/")
if int(num_of_installments[0]) 1 >。 = int(num_of_installments[1]) 。
c.execute('DELETE FROM OTPLATA_NA_RATE WHERE Opis = ?',(p_description,) )
conn.commit()
btn_to_del = self.dict_for_buttons[p_description] 。
btn_to_del.destroy()
self.dict_for_buttons.pop(p_description)
作業完美,但現在又發生了一個錯誤。無論如何,感謝你的幫助,如果我不能單獨解決這個問題,我會再次詢問!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/320726.html
標籤:
上一篇:按鈕onload呼叫函式
