简体   繁体   中英

'Button' object has no attribute 'destroy'?

I am trying to code a program that updates my drug database. I am trying to have a nice display but as I am a newby in pyhton I am facing some troubles.

Edit : What I want here is to enter the info in my "Add drug window" and by cliking the "OK" button, close the window and add the info to my txt document. The closing part is not working here.

Here is my error message :

File "C:\Users\arty\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "testw.py", line 48, in ok
self.destroy()
AttributeError: 'Buttons1' object has no attribute 'destroy'

And here is my code :

from tkinter import *


class Buttons:

    def __init__(self, master):
        self.master = master
        self.frame = Frame(self.master)
        self.b1 = Button(self.master, text="Add a New Drug", 
        command=self.Add_Drug_Window)
        self.b1.grid()
        self.frame.grid()

    def Add_Drug_Window(self):            
        #self.master.withdraw()
        self.AddDrugWindow = Toplevel(self.master)
        self.okbutton = Buttons1(self.AddDrugWindow)


        #Create widget as this, simple to read.
        Label(self.AddDrugWindow, text="Drug name").grid(row=0)
        Label(self.AddDrugWindow, text="Url :").grid(row=1)
        self.newdrugnameEntry = Entry(self.AddDrugWindow)
        self.newurlEntry = Entry(self.AddDrugWindow)
        self.newdrugnameEntry.grid(row=0, column=1)
        self.newurlEntry.grid(row=1, column=1)
        global newdrugname
        global newurl
        newdrugname = self.newdrugnameEntry.get()
        newurl= self.newurlEntry.get()

class Buttons1:     

    def __init__(self, master): #self, master
        self.master = master
        self.frame = Frame(self.master)
        self.bok = Button(self.master, text="ok", command=self.ok)
        self.bok.grid(row=3, column=0)
        self.frame.grid()

    def ok(self):
        with open('lorem_ipsum.txt', 'a') as f:
            f.write( '\n' + newdrugname + ':' + newurl)   
        self.destroy()
        master.deiconify()  



if __name__ == '__main__':
fenetreroot = Tk()
b = Buttons(fenetreroot)
fenetreroot.mainloop()

I've spent days trying to solve this but without success..

Perhaps you're looking for self.master.destroy():

from tkinter import *


class Buttons:

    def __init__(self, master):
        self.master = master
        self.frame = Frame(self.master)
        self.b1 = Button(self.master, text="Add a New Drug", 
        command=self.Add_Drug_Window)
        self.b1.grid()
        self.frame.grid()

    def Add_Drug_Window(self):            
        #self.master.withdraw()
        self.AddDrugWindow = Toplevel(self.master)
        self.okbutton = Buttons1(self.AddDrugWindow)


        #Create widget as this, simple to read.
        Label(self.AddDrugWindow, text="Drug name").grid(row=0)
        Label(self.AddDrugWindow, text="Url :").grid(row=1)
        self.newdrugnameEntry = Entry(self.AddDrugWindow)
        self.newurlEntry = Entry(self.AddDrugWindow)
        self.newdrugnameEntry.grid(row=0, column=1)
        self.newurlEntry.grid(row=1, column=1)
        global newdrugname
        global newurl
        newdrugname = self.newdrugnameEntry.get()
        newurl= self.newurlEntry.get()

class Buttons1:     

    def __init__(self, master): #self, master
        self.master = master
        self.frame = Frame(self.master)
        self.bok = Button(self.master, text="ok", command=self.ok)
        self.bok.grid(row=3, column=0)
        self.frame.grid()

    def ok(self):
        with open('lorem_ipsum.txt', 'a') as f:
            f.write( '\n' + newdrugname + ':' + newurl)   
        self.master.destroy()
        master.deiconify()  



if __name__ == '__main__':
fenetreroot = Tk()
b = Buttons(fenetreroot)
fenetreroot.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM