Problem mit NameError: name des Labels ist nicht definiert??
Verfasst: Montag 22. Februar 2021, 10:48
Hallo zusammen,
ich habe folgendes Problem mit meinem Code.
Ich möchte den Text eines Tkinter Labels (lbl_portfolioOverview) mittels click auf einen Button (btn_CheckPortfolio) ändern.
Allerdings bkekomme ich immer die Meldung:
NameError: name 'lbl_portfolioOverview' is not defined
obwohl ich das meiner Ansicht nach in Zeile 103 von pages.py getan habe.
Hier der vollständige Code meines Programms soweit:
zunächst die main.py
und hier der Teil wo meiner Vermutung nach der Fehler liegt
pages.py
anscheinend komme ich irgendwie mit der Übergabe des Labels an die Funktion nicht klar.
Besten Dank schon mal im Voraus
ich habe folgendes Problem mit meinem Code.
Ich möchte den Text eines Tkinter Labels (lbl_portfolioOverview) mittels click auf einen Button (btn_CheckPortfolio) ändern.
Allerdings bkekomme ich immer die Meldung:
NameError: name 'lbl_portfolioOverview' is not defined
obwohl ich das meiner Ansicht nach in Zeile 103 von pages.py getan habe.
Hier der vollständige Code meines Programms soweit:
zunächst die main.py
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
from views.pages import Disclaimer, HomePage, MyPortfolio
class PersonalBroker(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, 'Personal Broker')
container = tk.Frame(self)
container.pack(side='top', fill='both', expand=True)
container.grid_columnconfigure(0, weight=1)
container.grid_columnconfigure(1, weight=1)
container.grid_rowconfigure(0, weight=1)
self.frames = {}
pages = [Disclaimer, HomePage, MyPortfolio]
for page in pages:
frame = page(container, self)
self.frames[page] = frame
frame.grid(column=0, row=0, columnspan=2, sticky='NESW')
self.show_frame(Disclaimer)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
app = PersonalBroker()
width = '1280'
height = '720'
screenWitdh = int((app.winfo_screenwidth() - int(width)) / 2)
screenHeight = int((app.winfo_screenheight() - int(height)) / 2)
posWidth = str(screenWitdh)
posHeight = str(screenHeight)
app.geometry(f'{width}x{height}+{posWidth}+{posHeight}')
app.mainloop()
pages.py
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
import time
LARGE_FONT = ('Verdana', 12)
class Disclaimer(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="""
- Personal Broker Haftungsausschluss -
...
""", font=LARGE_FONT)
label.pack(pady=10, padx=10)
button1 = ttk.Button(self, text='Zustimmen', command=lambda: controller.show_frame(HomePage))
button1.pack()
button2 = ttk.Button(self, text='Ablehnen', command=quit)
button2.pack()
class HomePage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(1, weight=3)
self.grid_rowconfigure(0, weight=1)
mainCanvas = tk.Canvas(self, bg='black')
mainCanvas.grid(column=0, row=0, columnspan=2, sticky='nsew')
navigationCanvas = tk.Canvas(self, bg='blue')
navigationCanvas.grid_columnconfigure(0, weight=1)
navigationCanvas.grid_rowconfigure((0,1,2,3), weight=1)
navigationCanvas.grid(column=0, row=0, padx=5, pady=5, sticky='NSEW')
btn_MyPortfolio = ttk.Button(navigationCanvas, text='Mein Portfolio',
command=lambda: controller.show_frame(MyPortfolio))
btn_MyPortfolio.grid(column=0, row=0, padx=5, pady=5, sticky='NESW')
btn_FindStocks = ttk.Button(navigationCanvas, text='Aktien Finder', command=lambda: controller.show_frame(StockFinder))
btn_FindStocks.grid(column=0, row=1, padx=5, pady=5, sticky='NESW')
btn_HomePage = ttk.Button(navigationCanvas, text='Home Page', command=lambda: controller.show_frame(Disclaimer))
btn_HomePage.state(['disabled'])
btn_HomePage.grid(column=0, row=3, padx=5, pady=5, sticky='NESW')
button4 = ttk.Button(navigationCanvas, text='Beenden', command=quit)
button4.grid(column=0, row=4, padx=5, pady=5, sticky='NESW')
userViewCanvas = tk.Canvas(self, bg='blue')
userViewCanvas.grid_columnconfigure((0,1,2,3), weight=1)
userViewCanvas.grid_rowconfigure((0,1,2,3), weight=1)
lbl_PageTitle = tk.Label(userViewCanvas, text='Personal Broker - Home', anchor='center', font=LARGE_FONT)
lbl_PageTitle.grid(column=0, row=0, columnspan=4, rowspan=1, padx=5, pady=5, sticky='NESW')
userViewCanvas.grid(column=1, row=0, columnspan=7, padx=5, pady=5, sticky='NSEW')
class MyPortfolio(tk.Frame):
def getMyPortfolio(self, lbl_PortfolioOverview):
try:
print(lbl_portfolioOverview.text.set('endlich richtig'))
print('endlich richtig')
except Exception:
print('\n' + 'schon wieder falsch...' + '\n')
print(Exception.with_traceback())
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.text = tk.StringVar()
self.text.set('Dummy Text ')
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(1, weight=3)
self.grid_rowconfigure(0, weight=1)
mainCanvas = tk.Canvas(self, bg='black')
mainCanvas.grid(column=0, row=0, columnspan=2, sticky='nsew')
navigationCanvas = tk.Canvas(self, bg='blue')
navigationCanvas.grid_columnconfigure(0, weight=1)
navigationCanvas.grid_rowconfigure((0,1,2,3), weight=1)
navigationCanvas.grid(column=0, row=0, padx=5, pady=5, sticky='NSEW')
btn_CheckPortfolio = ttk.Button(navigationCanvas, text='Check Portfolio',
command=lambda: MyPortfolio.getMyPortfolio(self, lbl_PortfolioOverview))
btn_CheckPortfolio.grid(column=0, row=0, padx=5, pady=5, sticky='NESW')
btn_CreatePortfolio = ttk.Button(navigationCanvas, text='Portfolio erstellen', command=lambda: controller.show_frame(StockFinder))
btn_CreatePortfolio.grid(column=0, row=1, padx=5, pady=5, sticky='NESW')
btn_HomePage = ttk.Button(navigationCanvas, text='Home Page', command=lambda: controller.show_frame(HomePage))
btn_HomePage.grid(column=0, row=3, padx=5, pady=5, sticky='NESW')
btn_Quit = ttk.Button(navigationCanvas, text='Beenden', command=quit)
btn_Quit.grid(column=0, row=4, padx=5, pady=5, sticky='NESW')
userViewCanvas = tk.Canvas(self, bg='blue')
userViewCanvas.grid_columnconfigure((0,1,2,3), weight=1)
userViewCanvas.grid_rowconfigure((0,1,2,3), weight=1)
lbl_PageTitle = tk.Label(userViewCanvas, text='Personal Broker - Mein Portfolio', anchor='center', font=LARGE_FONT)
lbl_PageTitle.grid(column=0, row=0, columnspan=4, rowspan=1, padx=5, pady=5, sticky='NESW')
lbl_PortfolioOverview = tk.Label(userViewCanvas, textvariable=self.text, anchor='center', font=LARGE_FONT)
lbl_PortfolioOverview.grid(column=0, row=1, columnspan=4, rowspan=2, padx=5, pady=5, sticky='NESW')
userViewCanvas.grid(column=1, row=0, columnspan=7, padx=5, pady=5, sticky='NSEW')
Besten Dank schon mal im Voraus