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