I am getting an error AttributeError: '_tkinter.tkapp' object has no attribute 'file1' and i have no idea how to fix it. Could any one Point me in the right direction or help me out. I marked out in the code whats triggering the error.
The full error msg
The full error msg
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\xzenon\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__
return self.func(*args)
File "C:\Users\xzenon\Desktop\frame switching - kopia.py", line 60, in make
self.file1.writelines('{}.{}\n'.format(value1, parts+1))
File "C:\Users\xzenon\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1949, in __getattr__
return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'file1'And here is the code.from tkinter import *
import tkinter as tk
from tkinter import ttk
TITLE_FONT = ("Helvetica", 18, "bold")
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.öppna_data_filer()
# the container is where we'll stack a bunch of frames
# on top of each other, then the one we want visible
# will be raised above the others
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
# put all of the pages in the same location;
# the one on the top of the stacking order
# will be the one that is visible.
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("StartPage")
def show_frame(self, page_name):
'''Show a frame for the given page name'''
frame = self.frames[page_name]
frame.tkraise()
def öppna_data_filer(self):
self.file1 = open('partmärkning.txt', 'wt')
self.file2 = open('kabelmärking.txt', 'wt')
#Vad ska göras när programet stängs av
def On_exit(self):
#stänger ner data filer och sparar data
self.file1.close()
self.file2.close()
#stäng av prgramet
root.destroy()
#funktioner This is what triggering the error.
def make(self, *args):
try:
a = self.kabelsort.get()
value1 = (self.kabel.get())
value2 = (self.part.get())
value3 = (self.ränsa.get())
if (a == 1):
for parts in range(value2):
self.file1.writelines('{}.{}\n'.format(value1, parts+1))
self.file1.writelines('{}.{}\n'.format(value1, "SC"))
self.file2.writelines('{}\n'.format(value1))
self.listbox.insert(END, value1)
print(value1)
elif (a == 2):
for parts in range(value2):
self.file1.writelines('{}.{}\n'.format(value1, parts+1))
self.file2.writelines('{}\n'.format(value1))
self.listbox.insert(END, value1)
print(value1)
elif (a == 3):
if (value2 == 3):
self.file1.writelines('{}.{}\n'.format(value1, "BN"))
self.file1.writelines('{}.{}\n'.format(value1, "BU"))
self.file1.writelines('{}.{}\n'.format(value1, "YE/GN"))
self.file1.writelines('{}.{}\n'.format(value1, "SC"))
self.file2.writelines('{}\n'.format(value1))
self.listbox.insert(END, value1)
print(value1)
elif (value2 == 5):
self.file1.writelines('{}.{}\n'.format(value1, "BN"))
self.file1.writelines('{}.{}\n'.format(value1, "BK"))
self.file1.writelines('{}.{}\n'.format(value1, "GY"))
self.file1.writelines('{}.{}\n'.format(value1, "BU"))
self.file1.writelines('{}.{}\n'.format(value1, "YE/GN"))
self.file1.writelines('{}.{}\n'.format(value1, "SC"))
self.file2.writelines('{}\n'.format(value1))
self.listbox.insert(END, value1)
print(value1)
if (value3 == 1):
self.kabelnamn_entry.delete(0, END)
self.part_entry.delete(0, END)
except ValueError:
pass
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="This is the start page", font=TITLE_FONT)
label.pack(side="top", fill="x", pady=10)
button1 = tk.Button(self, text="Go to Page One",
command=lambda: controller.show_frame("PageOne"))
button1.pack()
class PageOne(tk.Frame, SampleApp):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
#fönster designern här bästems fönster ramar, rader och columner
mainframe = ttk.Frame(self, padding="4 4 12 12")
mainframe.grid(column=1, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
frame = ttk.Frame(self, relief=SUNKEN, padding="2 2 0 12")
frame.grid(column=0, row=0, sticky=(N, W, E, S))
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)
#data strings som används av funktioner
self.kabel = StringVar()
self.part = IntVar()
self.kabelsort = IntVar()
self.kabelsort.set(1)
self.ränsa = IntVar()
#fönster designern. här bestäms vad du ska ha och vart det ska placeras etc
#--------------------------------------------------------------------------
#etikettera, textrutor
ttk.Label(mainframe, text="Kabelnamn:").grid(column=1, row=0, sticky=(W, E), columnspan=2)
self.kabelnamn_entry = tk.Entry(mainframe, textvariable=self.kabel)
self.kabelnamn_entry.grid(column=1, row=1, sticky=(W, E), columnspan=3)
ttk.Label(mainframe, text="Parter:").grid(column=1, row=2, sticky=(W, E), columnspan=2)
self.part_entry = tk.Entry(mainframe, textvariable=self.part)
self.part_entry.grid(column=1, row=3, sticky=(W, E), columnspan=3)
self.part_entry.delete(0, END)
#radioknappar, checkbuttons
sort1 = tk.Radiobutton(mainframe, text='Skärmad kabel', variable=self.kabelsort, value='1').grid(column=2, row=4, sticky=W)
sort2 = tk.Radiobutton(mainframe, text='Oskärmad', variable=self.kabelsort, value='2').grid(column=3, row=4, sticky=W)
sort3 = tk.Radiobutton(mainframe, text='Eklk/Eqlq färgade', variable=self.kabelsort, value='3').grid(column=2, row=5, sticky=W)
sort4 = tk.Checkbutton(mainframe, text='Ränsa fält', variable=self.ränsa, onvalue=1, offvalue=0).grid(column=3, row=5, sticky=W)
#Listbox
self.listbox = Listbox(frame, height=10)
self.listbox.grid(column=0, row=0, rowspan=6, sticky=(N, W, S))
# create a vertical scrollbar to the right of the listbox
scrollbar = tk.Scrollbar(frame, orient=VERTICAL)
scrollbar.grid(column=1, row=0, rowspan=6, sticky=(N, E, S))
# koppla ihop listbox med scrollbar
self.listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=self.listbox.yview)
#knappar
b1 = tk.Button(mainframe, text="Make", command=self.make).grid(column=3, row=6,sticky=E)
b2 = tk.Button(mainframe, text="About", command=self.about).grid(column=2, row=6,sticky=W)
for child in mainframe.winfo_children():
child.grid_configure(padx=5, pady=5)
def about(self, *args):
top1 = Toplevel()
top1.title("About")
top1.resizable(width=False, height=False)
#fönster designern här bästems fönster ramar, rader och columner
frame2 = tk.Frame(top1, padding="3 3 12 12")
frame2.grid(column=1, row=0, sticky=(N, W, E, S))
frame2.columnconfigure(0, weight=1)
frame2.rowconfigure(0, weight=1)
tk.Label(frame2, text="KabelMärkarn", font=('', 15)).grid(column=0, row=0, columnspan=1)
tk.Label(frame2, text="Version: 2.0").grid(column=0, row=1, sticky=W)
tk.Label(frame2, text="Skapad och ägs av Mikael Gharib.").grid(column=0, row=2, sticky=W, columnspan=2)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
