Python Forum
[Tkinter] AttributeError: '' object has no attribute 'tk' - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [Tkinter] AttributeError: '' object has no attribute 'tk' (/thread-30651.html)



AttributeError: '' object has no attribute 'tk' - Maryan - Oct-29-2020

I had to seperate this file from the main app, because had some errors that I had to fix them first. However, when I run the app I'm getting AttributeError. What am I missing?

from tkinter import *
from tkinter import Tk
from tkinter.ttk import Combobox
from tkcalendar import *
from tkinter import messagebox, filedialog
import sqlite3

class AddEmp():
    def __init__(self):
        ### FRAMES ###

        # Top Frame - Header
        self.topFrame = Frame(self, height = 100, bg = '#333')
        self.topFrame.pack(fill = X)

        # Center Frame - Buttons
        self.centerFrame= Frame(self, height = 750, bg = '#121212')
        self.centerFrame.pack(fill = X)

        # Top Frame - Data #
        # Header in Top Frame
        self.header_image = PhotoImage(file = 'img/add_employee.png')
        self.header_lbl = Label(self.topFrame, image = self.header_image, bg = '#333')
        self.header_lbl.grid(row = 0, column = 0, padx = 15, pady = 15)
        self.header_introduction = Label(self.topFrame, text = 'Add Employee', fg = '#b3b3b3', bg = '#333')
        self.header_introduction.grid(row = 0, column = 1)

        ######

root = Tk()
app = AddEmp()
root.title('All Fields are required')
root.geometry('440x823+700+150')
root.resizable(False, False)
root.mainloop()



RE: AttributeError: '' object has no attribute 'tk' - deanhystad - Oct-29-2020

Are you sure this ever worked? AppEmp is not any kind of window, but you pass it as the parent to a frame (as self).

I am not sure how you go about fixing this. Is AddEmp a frame? Is it a dialog? I am going to make it a frame.
from tkinter import *
from tkinter import Tk
 
class AddEmp(Frame):  # Need some kind of frame or window as superclass
    def __init__(self, *args, **kvargs):
        super().__init__(*args, **kvargs)  # Initialize superclass
        self.pack(fill='both', expand=True)  # Pack self in parent

        # Now you can add widgets to self because self is a frame.
        self.header_lbl = Label(self, text='Label 1')
        self.header_lbl.grid(row = 0, column = 0, padx = 15, pady = 15)
        self.header_introduction = Label(self, text = 'Label 2')
        self.header_introduction.grid(row = 1, column = 0)
 
root = Tk()
AddEmp(root)
root.title('All Fields are required')
root.geometry('100x100')
root.mainloop()



RE: AttributeError: '' object has no attribute 'tk' - Maryan - Oct-29-2020

It's dialog from the main app. On click this one popup. Altought I know the basics to create window, I have still trouble when there is class involved, like in this case. I'm not sure where the geometry should be inside the class, before the class or bottom like I did in the post.

(Oct-29-2020, 11:40 PM)deanhystad Wrote: Are you sure this ever worked? AppEmp is not any kind of window, but you pass it as the parent to a frame (as self).

I am not sure how you go about fixing this. Is AddEmp a frame? Is it a dialog? I am going to make it a frame.
from tkinter import *
from tkinter import Tk
 
class AddEmp(Frame):  # Need some kind of frame or window as superclass
    def __init__(self, *args, **kvargs):
        super().__init__(*args, **kvargs)  # Initialize superclass
        self.pack(fill='both', expand=True)  # Pack self in parent

        # Now you can add widgets to self because self is a frame.
        self.header_lbl = Label(self, text='Label 1')
        self.header_lbl.grid(row = 0, column = 0, padx = 15, pady = 15)
        self.header_introduction = Label(self, text = 'Label 2')
        self.header_introduction.grid(row = 1, column = 0)
 
root = Tk()
AddEmp(root)
root.title('All Fields are required')
root.geometry('100x100')
root.mainloop()