2015-12-05 1 views
0

Je n'arrive pas à trouver un moyen de supprimer une rangée de widgets dans mon application de partage. J'expérimente actuellement avec la méthode grid_forget; Cependant, cela ne fait que supprimer la toute dernière instance de l'objet. Mon but est de pouvoir entrer le code relatif à la ligne que je veux supprimer, qui trouvera alors le code dans la liste des étiquettes et supprimera cette ligne entière, après quoi les lignes s'ajusteront automatiquement et se déplaceront pour remplir tout espace blanc. Pour être honnête je ne suis pas sûr que ce soit réalisable avec tkinter et python, mais je ne suis qu'un débutant donc je ne sais pas vraiment. Le code de suppression ressemble à ceci:Comment supprimer une ligne spécifique de widgets d'étiquettes dans l'application tkinter

def delete(self, event = None): 
    if self.code_entry_delete.get() in self.code_list: 
     self.label1.grid_forget() 
     self.label2.grid_forget() 
     … 
     self.label10.grid_forget() 

Le problème que je vais avoir est que self.label1…label10 sont répétées sur plusieurs lignes, donc oublier self.label1 ne sera oublier l'entrée la plus récente. Cela signifie que j'ai besoin de trouver un moyen d'oublier self.label1 à self.label10 à la ligne x, où x est égal au numéro de ligne que je veux supprimer/oublier.

Code complet pour mon programme incomplet mais fonctionnel ci-dessous. Si quelqu'un copie et colle le code pour le tester, l'Australie utilise des codes à trois lettres pour les sociétés sur notre marché des actions, à savoir. STO, NAB, ABC. etc ...

#!/usr/bin/env python3.4 

from tkinter import * 
import ystockquote 
import urllib.request 
from urllib.request import urlopen 
from bs4 import BeautifulSoup 

class Shares(Frame): 

def __init__(self, master): 
    Frame.__init__(self, master) 

    Frame.__init__(self, master) 
    self.frame = Frame(master, bg = "#ededed") 
    self.frame.grid(row = 9, column = 0) 
    self.canvas = Canvas(self.frame, bg = "#ffffff") 
    self.data_frame = Frame(self.canvas, bg = "#ffffff") 
    self.vscrollbar = Scrollbar(self.frame, orient = "vertical", command = self.canvas.yview) 
    self.canvas.configure(yscrollcommand = self.vscrollbar.set) 
    self.vscrollbar.grid(row = 9, column = 11, sticky = NS) 
    self.canvas.config(width = 1210, height = 200) 
    self.canvas.grid(row = 9, column = 0, columnspan = 11, sticky = E) 
    self.canvas.create_window((0, 0), window = self.data_frame, anchor = "nw", tags = "self.frame") 
    self.data_frame.bind("<Configure>", self.onFrameConfig) 

    self.data_frame.grid_columnconfigure(0, minsize = 352) 
    self.data_frame.grid_columnconfigure(1, minsize = 96) 
    self.data_frame.grid_columnconfigure(2, minsize = 96) 
    self.data_frame.grid_columnconfigure(3, minsize = 96) 
    self.data_frame.grid_columnconfigure(4, minsize = 96) 
    self.data_frame.grid_columnconfigure(5, minsize = 96) 
    self.data_frame.grid_columnconfigure(6, minsize = 96) 
    self.data_frame.grid_columnconfigure(7, minsize = 96) 
    self.data_frame.grid_columnconfigure(8, minsize = 96) 
    self.data_frame.grid_columnconfigure(9, minsize = 96) 

    master.bind("<Return>", self.company_details) 

    Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Enter ASX Code").grid(row = 0, column = 0, sticky = W, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Current Price").grid(row = 2, column = 0, sticky = W, padx = 5, pady = 5) 

    self.entryVar = StringVar() 
    Entry(self.frame, width = 12, font = "Helvetica 20", textvariable = self.entryVar).grid(row = 0, column = 1, padx = 5, pady = 5) 

    self.companyVar = StringVar() 
    Label(self.frame, font = "Helvetica 20", textvariable = self.companyVar).grid(row = 1, column = 0, columnspan = 2, sticky = W, padx = 5, pady = 5) 

    self.priceVar = DoubleVar() 
    Label(self.frame, font = "Helvetica 20", textvariable = self.priceVar).grid(row = 2, column = 1, sticky = W, padx = 5, pady = 5) 
    self.priceVar.set("") 

    Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Current Action").grid(row = 3, column = 0, sticky = W, padx = 5, pady = 5) 

    Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Current Holdings").grid(row = 7, column = 0, pady = 5) 

    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Name").grid(row = 8, column = 0, columnspan = 2, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Code").grid(row = 8, column = 2, padx = 5, pady = 5, sticky = E) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Buy Date").grid(row = 8, column = 3, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Quantity").grid(row = 8, column = 4, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Paid").grid(row = 8, column = 5, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Brokerage").grid(row = 8, column = 6, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Total").grid(row = 8, column = 7, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Current").grid(row = 8, column = 8, padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Total").grid(row = 8, column = 9,padx = 5, pady = 5) 
    Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Loss/Gain").grid(row = 8, column = 10, padx = 5, pady = 5) 

    Label(self.frame, bg = "#ededed", text = "Amount").grid(row = 16, column = 10, padx = 5, pady = 5, sticky = E) 
    Label(self.frame, bg = "#ededed", text = "Amount").grid(row = 16, column = 9, padx = 5, pady = 5, sticky = E) 
    Label(self.frame, bg = "#ededed", text = "Amount").grid(row = 16, column = 8, padx = 5, pady = 5, sticky = E) 

    Button(self.frame, width = 11, text = "New Record", command = self.new_record).grid(row = 16, column = 0, padx = 5, pady = 5, sticky = E) 
    #Button(self.frame, width = 11, text = "Modify Record", command = self.new_record).grid(row = 16, column = 1, padx = 5, pady = 5) 
    Button(self.frame, width = 11, text = "Delete Record", command = self.delete_record).grid(row = 16, column = 2, padx = 5, pady = 5, sticky = E) 

    self.rows = 0 

    self.code_list = [] 

def validate_code(self): 
    soup = BeautifulSoup(urllib.request.urlopen("https://au.finance.yahoo.com/q?s=" + (self.code_entry.get() + ".AX")).read(), "html.parser") 
    element = soup.find("div", ("class", "title")) 
    name = element.find("h2") 
    self.name_entry.set(name.text[:-9]) 

def new_record(self): 
    top = self.top = Toplevel() 

    top.bind("<Return>", self.add) 

    Label(top, text = "Code: ").grid(row = 0, column = 0, sticky = E, padx = 5, pady = 5) 
    Label(top, text = "Name: ").grid(row = 2, column = 0, sticky = E, padx = 5, pady = 5) 
    Label(top, text = "Buy Date: ").grid(row = 3, column = 0, sticky = E, padx = 5, pady = 5) 
    Label(top, text = "Quantity: ").grid(row = 4, column = 0, sticky = E, padx = 5, pady = 5) 
    Label(top, text = "Paid: ").grid(row = 5, column = 0, sticky = E, padx = 5, pady = 5) 
    Label(top, text = "Brokerage: ").grid(row = 6, column = 0, sticky = E, padx = 5, pady = 5) 

    self.name_main = StringVar() 
    self.label1 = Label(self.data_frame, textvariable = self.name_main) 
    self.label1.grid(row = self.rows, column = 0, sticky = W) 
    self.name_main.set("") 

    self.name_entry = StringVar() 
    Entry(top, textvariable = self.name_entry).grid(row = 2, column = 1, padx = 5, pady = 5) 
    self.name_entry.set("") 

    self.code_main = StringVar() 
    self.label2 = Label(self.data_frame, textvariable = self.code_main) 
    self.label2.grid(row = self.rows, column = 1, sticky = EW) 
    self.code_main.set("") 

    self.code_entry = StringVar() 
    Entry(top, textvariable = self.code_entry, validatecommand = self.validate_code).grid(row = 0, column = 1, padx = 5, pady = 5) 
    self.code_entry.set("") 

    self.date_main = StringVar() 
    self.label3 = Label(self.data_frame, textvariable = self.date_main) 
    self.label3.grid(row = self.rows, column = 2, sticky = EW) 
    self.date_main.set("") 

    self.date_entry = StringVar() 
    Entry(top, textvariable = self.date_entry).grid(row = 3, column = 1, padx = 5, pady = 5) 
    self.date_entry.set("") 

    self.quantity_main = IntVar() 
    self.label4 = Label(self.data_frame, textvariable = self.quantity_main) 
    self.label4.grid(row = self.rows, column = 3, sticky = E) 
    self.quantity_main.set("") 

    self.quantity_entry = IntVar() 
    Entry(top, textvariable = self.quantity_entry).grid(row = 4, column = 1, padx = 5, pady = 5) 
    self.quantity_entry.set("") 

    self.paid_main = DoubleVar() 
    self.label5 = Label(self.data_frame, textvariable = self.paid_main) 
    self.label5.grid(row = self.rows, column = 4, sticky = E) 
    self.paid_main.set("") 

    self.paid_entry = DoubleVar() 
    Entry(top, textvariable = self.paid_entry).grid(row = 5, column = 1, padx = 5, pady = 5) 
    self.paid_entry.set("") 

    self.brokerage_main = DoubleVar() 
    self.label6 = Label(self.data_frame, textvariable = self.brokerage_main) 
    self.label6.grid(row = self.rows, column = 5, sticky = E) 
    self.brokerage_main.set("") 

    self.brokerage_entry = DoubleVar() 
    Entry(top, textvariable = self.brokerage_entry).grid(row = 6, column = 1, padx = 5, pady = 5) 
    self.brokerage_entry.set(29.95) 

    self.total_main = DoubleVar() 
    self.label7 = Label(self.data_frame, textvariable = self.total_main) 
    self.label7.grid(row = self.rows, column = 6, sticky = E) 
    self.total_main.set("") 

    self.current_main = DoubleVar() 
    self.label8 = Label(self.data_frame, textvariable = self.current_main) 
    self.label8.grid(row = self.rows, column = 7, sticky = E) 
    self.current_main.set("") 

    self.total_two_main = DoubleVar() 
    self.label9 = Label(self.data_frame, textvariable = self.total_two_main) 
    self.label9.grid(row = self.rows, column = 8, sticky = E) 
    self.total_two_main.set("") 

    self.loss_gain_main = DoubleVar() 
    self.label10 = Label(self.data_frame, textvariable = self.loss_gain_main) 
    self.label10.grid(row = self.rows, column = 9, sticky = E) 
    self.loss_gain_main.set("") 

    Button(top, text = "Validate code", command = self.validate_code).grid(row = 1, column = 1, padx = 5, pady = 5) 

    Button(top, text = "Add", command = self.add).grid(row = 7, column = 1, sticky = W, padx = 5, pady = 5) 

    Button(top, text = "Cancel", command = self.cancel).grid(row = 7, column = 1, sticky = E, padx = 5, pady = 5) 

def add(self, event = None): 
    self.rows += 1 
    self.code_list.append(self.code_entry.get()) 
    code = str.upper(self.code_entry.get()) 
    self.code_main.set(code) 
    self.name_main.set(self.name_entry.get()) 
    self.date_main.set(self.date_entry.get()) 
    self.quantity_main.set(self.quantity_entry.get()) 
    paid = self.paid_entry.get() 
    self.paid_main.set("$%.2f" % paid) 
    brokerage = self.brokerage_entry.get() 
    self.brokerage_main.set("$%.2f" % brokerage) 
    total = self.quantity_entry.get() * self.paid_entry.get() + self.brokerage_entry.get() 
    self.total_main.set("$%.2f" % total) 
    self.current_main.set("$" + str(ystockquote.get_price(self.code_entry.get() + ".AX"))) 
    curent_main = float(ystockquote.get_price(self.code_entry.get() + ".AX")) 
    total_two = curent_main * self.quantity_entry.get() 
    self.total_two_main.set("$%.2f" % total_two) 
    rounded = ((total_two/total * 100) - 100) 
    self.loss_gain_main.set("%.2f" % rounded + "%") 
    self.top.destroy() 

def cancel(self, event = None): 
    self.top.destroy() 

def delete_record(self): 
    top = self.top = Toplevel() 

    top.bind("<Return>", self.delete) 

    Label(top, text = "Please enter code of record to be deleted: ").grid(row = 0, column = 0, sticky = E, padx = 5, pady = 5) 

    self.code_entry_delete = StringVar() 
    Entry(top, textvariable = self.code_entry_delete).grid(row = 0, column = 1, padx = 5, pady = 5) 
    self.code_entry_delete.set("") 

    Button(top, text = "Delete Record", command = self.delete).grid(row = 1, column = 1, padx = 5, pady = 5) 
    Button(top, text = "Cancel", command = self.cancel).grid(row = 1, column = 0, padx = 5, pady = 5) 

def delete(self, event = None): 
    if self.code_entry_delete.get() in self.code_list: 
     self.label1.grid_forget() 
     self.label2.grid_forget() 
     self.label3.grid_forget() 
     self.label4.grid_forget() 
     self.label5.grid_forget() 
     self.label6.grid_forget() 
     self.label7.grid_forget() 
     self.label8.grid_forget() 
     self.label9.grid_forget() 
     self.label10.grid_forget() 
     self.top.destroy() 

def company_details(self, event): 
    self.priceVar.set("$" + (ystockquote.get_price(self.entryVar.get() + ".AX"))) 

    soup = BeautifulSoup(urllib.request.urlopen("https://au.finance.yahoo.com/q?s=" + (self.entryVar.get() + ".AX")).read(), "html.parser") 
    element = soup.find("div", ("class", "title")) 
    name = element.find("h2") 
    self.companyVar.set(name.text[:-9]) 

def onFrameConfig(self, event): 
    self.canvas.configure(scrollregion = self.canvas.bbox("all")) 

if __name__ == "__main__": 
    master = Tk() 
    master.title("Share Program") 
    app = Shares(master) 
    master.geometry("1235x528+20+40") 
    master.mainloop() 
+0

Je suggère la création d'un bon nombre de cadres pour garder les étiquettes de sorte que vous pouvez simplement supprimer tout le cadre. –

+0

Merci pour la suggestion - Je n'arrive pas vraiment à comprendre comment cela fonctionnerait, mais je ne pense pas que ce soit faisable puisque j'ai placé mon cadre dans une toile avec une barre de défilement pour que vous puissiez ajouter autant de lignes comme vous voulez et la toile s'élargira pour répondre à cela. La façon dont je le vois, en créant beaucoup d'images limitera les entrées au nombre d'images que je crée. – SGB

+0

Oui, mais vous pouvez créer autant d'images que vous le souhaitez. –

Répondre

1

Voici un code qui pourrait vous aider. Pour créer un nouveau cadre, appelez add_frame() puis supprimez un appel de trame framelist[whatevernumbertheframeis].destroy(). Pour créer des widgets dans le cadre, allez Label(framelist[framenumber], text="etc.") et pour créer un widget dans le dernier cadre créé, faites Label(framelist[-1], text="etc."). J'espère que cela t'aides!

from Tkinter import * 
framelist=[] 
frames=1 
def add_frame(): 
    global frames 
    framelist.append(Frame(root)) 
    framelist[-1].grid() 
    frames+=1 

root=Tk() 
for i in range(20): 
    add_frame() 
    Label(framelist[i], text="Frame %i" % (i)).grid() 
framelist[6].destroy() 
root.mainloop() 

maintenant parce que je n'ai pas vos modules, je ne peux pas le faire parfaitement, mais voici un exemple de la façon dont vous pourriez faire partie.

P.S Il y a encore plusieurs erreurs dans le code ...

from Tkinter import * 
import ystockquote 
import urllib.request 
from urllib.request import urlopen 
from bs4 import BeautifulSoup 


""" 

I am adding comments so that if 
you need help from stackoverflow 
on this again they will know whats 
what because it took me a looooong time 

""" 




class Shares(Frame): 
# Main page to display gain/loss on different shares 
    def __init__(self, master): 
     Frame.__init__(self, master) 

     Frame.__init__(self, master) 
     self.frame = Frame(master, bg = "#ededed") 
     self.frame.grid(row = 9, column = 0) 
     self.canvas = Canvas(self.frame, bg = "#ffffff") 
     self.data_frame = Frame(self.canvas, bg = "#ffffff") 
     self.vscrollbar = Scrollbar(self.frame, orient = "vertical", command = self.canvas.yview) 
     self.canvas.configure(yscrollcommand = self.vscrollbar.set) 
     self.vscrollbar.grid(row = 9, column = 11, sticky = NS) 
     self.canvas.config(width = 1210, height = 200) 
     self.canvas.grid(row = 9, column = 0, columnspan = 11, sticky = E) 
     self.canvas.create_window((0, 0), window = self.data_frame, anchor = "nw", tags = "self.frame") 
     self.data_frame.bind("<Configure>", self.onFrameConfig) 

     self.data_frame.grid_columnconfigure(0, minsize = 352) 
     self.data_frame.grid_columnconfigure(1, minsize = 96) 
     self.data_frame.grid_columnconfigure(2, minsize = 96) 
     self.data_frame.grid_columnconfigure(3, minsize = 96) 
     self.data_frame.grid_columnconfigure(4, minsize = 96) 
     self.data_frame.grid_columnconfigure(5, minsize = 96) 
     self.data_frame.grid_columnconfigure(6, minsize = 96) 
     self.data_frame.grid_columnconfigure(7, minsize = 96) 
     self.data_frame.grid_columnconfigure(8, minsize = 96) 
     self.data_frame.grid_columnconfigure(9, minsize = 96) 

     master.bind("<Return>", self.company_details) 

     Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Enter ASX Code").grid(row = 0, column = 0, sticky = W, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Current Price").grid(row = 2, column = 0, sticky = W, padx = 5, pady = 5) 

     self.entryVar = StringVar() 
     Entry(self.frame, width = 12, font = "Helvetica 20", textvariable = self.entryVar).grid(row = 0, column = 1, padx = 5, pady = 5) 

     self.companyVar = StringVar() 
     Label(self.frame, font = "Helvetica 20", textvariable = self.companyVar).grid(row = 1, column = 0, columnspan = 2, sticky = W, padx = 5, pady = 5) 

     self.priceVar = DoubleVar() 
     Label(self.frame, font = "Helvetica 20", textvariable = self.priceVar).grid(row = 2, column = 1, sticky = W, padx = 5, pady = 5) 
     self.priceVar.set("") 

     Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Current Action").grid(row = 3, column = 0, sticky = W, padx = 5, pady = 5) 

     Label(self.frame, bg = "#ededed", font = "Helvetica 20", text = "Current Holdings").grid(row = 7, column = 0, pady = 5) 

     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Name").grid(row = 8, column = 0, columnspan = 2, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Code").grid(row = 8, column = 2, padx = 5, pady = 5, sticky = E) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Buy Date").grid(row = 8, column = 3, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Quantity").grid(row = 8, column = 4, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Paid").grid(row = 8, column = 5, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Brokerage").grid(row = 8, column = 6, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Total").grid(row = 8, column = 7, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Current").grid(row = 8, column = 8, padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Total").grid(row = 8, column = 9,padx = 5, pady = 5) 
     Label(self.frame, bg = "#ededed", width = 10, font = "Helvetica 14 bold", text = "Loss/Gain").grid(row = 8, column = 10, padx = 5, pady = 5) 

     Label(self.frame, bg = "#ededed", text = "Amount").grid(row = 16, column = 10, padx = 5, pady = 5, sticky = E) 
     Label(self.frame, bg = "#ededed", text = "Amount").grid(row = 16, column = 9, padx = 5, pady = 5, sticky = E) 
     Label(self.frame, bg = "#ededed", text = "Amount").grid(row = 16, column = 8, padx = 5, pady = 5, sticky = E) 

     Button(self.frame, width = 11, text = "New Record", command = self.new_record).grid(row = 16, column = 0, padx = 5, pady = 5, sticky = E) 
     #Button(self.frame, width = 11, text = "Modify Record", command = self.new_record).grid(row = 16, column = 1, padx = 5, pady = 5) 
     Button(self.frame, width = 11, text = "Delete Record", command = self.delete_record).grid(row = 16, column = 2, padx = 5, pady = 5, sticky = E) 

     self.rows = 0 

     self.code_list = {} 
# Function to validate Australian company codes 
    def validate_code(self): 
     soup = BeautifulSoup(urllib.request.urlopen("https://au.finance.yahoo.com/q?s=" + (self.code_entry.get() + ".AX")).read(), "html.parser") 
     element = soup.find("div", ("class", "title")) 
     name = element.find("h2") 
     self.name_entry.set(name.text[:-9]) 
# Adding a new company 
    def new_record(self): 
     top = self.top = Toplevel() 

     top.bind("<Return>", self.add) 

     Label(top, text = "Code: ").grid(row = 0, column = 0, sticky = E, padx = 5, pady = 5) 
     Label(top, text = "Name: ").grid(row = 2, column = 0, sticky = E, padx = 5, pady = 5) 
     Label(top, text = "Buy Date: ").grid(row = 3, column = 0, sticky = E, padx = 5, pady = 5) 
     Label(top, text = "Quantity: ").grid(row = 4, column = 0, sticky = E, padx = 5, pady = 5) 
     Label(top, text = "Paid: ").grid(row = 5, column = 0, sticky = E, padx = 5, pady = 5) 
     Label(top, text = "Brokerage: ").grid(row = 6, column = 0, sticky = E, padx = 5, pady = 5) 

     self.name_main = StringVar() 

     self.name_entry = StringVar() 
     Entry(top, textvariable = self.name_entry).grid(row = 2, column = 1, padx = 5, pady = 5) 
     self.name_entry.set("") 

     self.code_main = StringVar() 

     self.code_entry = StringVar() 
     Entry(top, textvariable = self.code_entry, validatecommand = self.validate_code).grid(row = 0, column = 1, padx = 5, pady = 5) 
     self.code_entry.set("") 

     self.date_main = StringVar() 


     self.date_entry = StringVar() 
     Entry(top, textvariable = self.date_entry).grid(row = 3, column = 1, padx = 5, pady = 5) 
     self.date_entry.set("") 

     self.quantity_main = IntVar() 


     self.quantity_entry = IntVar() 
     Entry(top, textvariable = self.quantity_entry).grid(row = 4, column = 1, padx = 5, pady = 5) 
     self.quantity_entry.set("") 

     self.paid_main = DoubleVar() 


     self.paid_entry = DoubleVar() 
     Entry(top, textvariable = self.paid_entry).grid(row = 5, column = 1, padx = 5, pady = 5) 
     self.paid_entry.set("") 
     self.frames=[] 
     self.column=0    

     self.brokerage_main = DoubleVar() 

     self.brokerage_entry = DoubleVar() 
     Entry(top, textvariable = self.brokerage_entry).grid(row = 6, column = 1, padx = 5, pady = 5) 
     self.brokerage_entry.set(29.95) 
     # 
     self.total_main = DoubleVar() 

     self.current_main = DoubleVar() 

     self.total_two_main = DoubleVar() 

     self.loss_gain_main = DoubleVar() 

     self.frames.append(Frame(self.data_frame)) 
     self.frames[-1].grid() 
     Label(self.frames[-1], textvariable=self.name_main).grid(row=self.rows, column=1) 
     Label(self.frames[-1], textvariable=self.code_main).grid(row=self.rows, column=2) 
     Label(self.frames[-1], textvariable=self.date_main).grid(row=self.rows, column=3) 
     Label(self.frames[-1], textvariable=self.quantity_main).grid(row=self.rows, column=4) 
     Label(self.frames[-1], textvariable=self.paid_main).grid(row=self.rows, column=1) 
     Label(self.frames[-1], textvariable=self.brokerage_main).grid(row=self.rows, column=6) 
     Label(self.frames[-1], textvariable=self.total_main).grid(row=self.rows, column=7) 
     Label(self.frames[-1], textvariable=self.current_main).grid(row=self.rows, column=8) 
     Label(self.frames[-1], textvariable=self.total_two_main).grid(row=self.rows, column=9) 
     Label(self.frames[-1], textvariable=self.loss_gain_main).grid(row=self.rows, column=10) 
     self.rows+=1 


     Button(top, text = "Validate code", command = self.validate_code).grid(row = 1, column = 1, padx = 5, pady = 5) 

     Button(top, text = "Add", command = self.add).grid(row = 7, column = 1, sticky = W, padx = 5, pady = 5) 

     Button(top, text = "Cancel", command = self.cancel).grid(row = 7, column = 1, sticky = E, padx = 5, pady = 5) 

    def add(self, event = None): 
     self.rows += 1 
     self.code_list[self.code_entry.get()]=self.frames[-1] 
     code = str.upper(self.code_entry.get()) 
     self.code_main.set(code) 
     self.name_main.set(self.name_entry.get()) 
     self.date_main.set(self.date_entry.get()) 
     self.quantity_main.set(self.quantity_entry.get()) 
     paid = self.paid_entry.get() 
     self.paid_main.set("$%.2f" % paid) 
     brokerage = self.brokerage_entry.get() 
     self.brokerage_main.set("$%.2f" % brokerage) 
     total = self.quantity_entry.get() * self.paid_entry.get() + self.brokerage_entry.get() 
     self.total_main.set("$%.2f" % total) 
     self.current_main.set("$" + str(ystockquote.get_price(self.code_entry.get() + ".AX"))) 
     curent_main = float(ystockquote.get_price(self.code_entry.get() + ".AX")) 
     total_two = self.current_main * self.quantity_entry.get() 
     self.total_two_main.set("$%.2f" % total_two) 
     rounded = ((total_two/total * 100) - 100) 
     self.loss_gain_main.set("%.2f" % rounded + "%") 
     self.top.destroy() 

    def cancel(self, event = None): 
     self.top.destroy() 

    def delete_record(self): 
     top = self.top = Toplevel() 

     top.bind("<Return>", self.delete) 

     Label(top, text = "Please enter code of record to be deleted: ").grid(row = 0, column = 0, sticky = E, padx = 5, pady = 5) 

     self.code_entry_delete = StringVar() 
     Entry(top, textvariable = self.code_entry_delete).grid(row = 0, column = 1, padx = 5, pady = 5) 
     self.code_entry_delete.set("") 

     Button(top, text = "Delete Record", command = self.delete).grid(row = 1, column = 1, padx = 5, pady = 5) 
     Button(top, text = "Cancel", command = self.cancel).grid(row = 1, column = 0, padx = 5, pady = 5) 

    def delete(self, event = None): 
     if self.code_entry_delete.get() in self.code_list: 
      self.code_list[self.code_entry_delete.get()].destroy() 


    def company_details(self, event): 
     self.priceVar.set("$" + (ystockquote.get_price(self.entryVar.get() + ".AX"))) 

     soup = BeautifulSoup(urllib.request.urlopen("https://au.finance.yahoo.com/q?s=" + (self.entryVar.get() + ".AX")).read(), "html.parser") 
     element = soup.find("div", ("class", "title")) 
     name = element.find("h2") 
     self.companyVar.set(name.text[:-9]) 

    def onFrameConfig(self, event): 
     self.canvas.configure(scrollregion = self.canvas.bbox("all")) 

if __name__ == "__main__": 
    master = Tk() 
    master.title("Share Program") 
    app = Shares(master) 
    master.geometry("1235x528+20+40") 
    master.mainloop() 
+0

Mon cerveau fond pratiquement en essayant de l'adapter à mon programme. J'apprécie votre aide, mais je n'arrive pas à comprendre comment cela fonctionne dans mon application. J'ai changé mon label en 'self.label2 = Label (self.framelist [i], textvariable = self.code_main)' et j'ai ajouté 'self.add_frame()' mais tout est un peu désordonné et alambiqué ... si vous pouviez fournir des conseils supplémentaires sur la façon de mettre en œuvre votre code, je serais reconnaissant. – SGB

+0

@SGB K. Je vais essayer de le faire demain mais ce n'est peut-être pas parfait ... –

+0

Merci beaucoup.J'essaie toujours de comprendre autant de nouveaux concepts de programmation que cela peut parfois être un peu écrasant. S'il y a une autre approche que je pourrais prendre pour résoudre la suppression d'étiquettes, (ou ajouter/supprimer des enregistrements en général) que vous jugez utile d'examiner, je serais heureux pour toute recommandation. Merci encore. – SGB