如何在tkinter应用程序中删除特定行标签小部件

如何在tkinter应用程序中删除特定行标签小部件

问题描述:

我无法找到一种方法在我的共享应用程序中删除一行小部件。我目前正在试验grid_forget方法;然而这只是删除了对象的最后一个实例。我的目标是能够输入与我想要删除的行相关的代码,然后它将在标签列表中找到代码并删除整行,然后行将自动调整并向上移动以填充任何行白色空间。说实话,我不确定这是否可以用tkinter和python实现,但我只是一个初学者,所以不知道。缺失的代码看起来是这样的:如何在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() 

我遇到的问题是,self.label1…label10重复了多行,所以忘记self.label1只会忘记最近的条目。这意味着我需要找到在第x行忘记self.label1self.label10的方法,其中x等于我想要删除/忘记的行号。

下面我的不完整但工作程序的完整代码。如果任何人复制并粘贴代码进行测试,澳大利亚在我们的股票市场上使用3个字母代码,即。 STO,NAB,CBA。 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

我建议建立大量框架,以保持标签的,所以你可以删除整个框架。 –

+0

感谢您的建议 - 我无法真正理解这将如何工作,但我不认为这是可行的,因为我已经将框架设置在具有滚动条的画布内,因此您可以添加尽可能多的行只要你愿意,画布就会展开以迎合它。我看到它的方式,创建大量的帧将限制我创建多少帧的条目。 – SGB

+0

是的,但您可以根据需要创建任意数量的帧。 –

这是一些代码可能会帮助你。要创建一个新的帧调用add_frame(),然后删除一个帧调用framelist[whatevernumbertheframeis].destroy()。 若要在框架中创建小部件,请转至Label(framelist[framenumber], text="etc.")并在最后创建的框架中创建小部件,然后执行Label(framelist[-1], text="etc.")。希望这可以帮助!

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() 

现在,因为我没有你的模块,我不能这样做很好,但这里是你如何能做到它的一部分的例子。

P.S还有在代码中的多个错误...

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

我的大脑几乎在融化,试图将它适应到我的程序中。我感谢你的帮助,但我似乎无法弄清楚它是如何工作到我的应用程序。我已经将我的标签更改为'self.label2 = Label(self.framelist [i],textvariable = self.code_main)'并添加了'self.add_frame()',但它有点凌乱和令人费解的atm ...如果可以的话提供关于如何实现您的代码的任何进一步的指导,我将不胜感激。 – SGB

+0

@SGB K.我会尽力做到明天,但它可能不完美... –

+0

非常感谢。我仍然试图让我的头脑围绕这么多新的编程概念,有时它可能有点压倒性。如果我可以采取另一种方法来解决标签删除问题(或者添加/删除一般记录),那么您认为值得研究,我很乐意提供任何建议。再次感谢。 – SGB