Jun-28-2017, 01:36 PM
My apologies I am new to forums and new to coding, I am sure I'm doing everything completely backwards.
I am trying to use my RPI 3b for home automation. I am using Python 3 and tkinter as a GUI.
I have reduced my program drastically to try and assist in easier troubleshooting, currently only showing different page and only one button under "main level" page.
Recently I only had one tkinter window with many buttons to toggle pins on my IO pi plus, at this point everything worked well.
Just this week I switched over to multiple pages to give it a smoother appearance.
The problem I am encountering currently is my GUI buttons do not show indication of the pins state of which they are toggling, on or off.
The error I get is " ToggleButton1["text"] = ("Fireplace On")
NameError: name 'toggleButton1' is not defined "
I am assuming this has something to do with classes (which I'm currently trying to comprehend) or even placement.
FYI if you try to run program you will need to change to gpio rather than looking for i2c bus.
Thank you in advance for any insight you may have resolve my issue
I am trying to use my RPI 3b for home automation. I am using Python 3 and tkinter as a GUI.
I have reduced my program drastically to try and assist in easier troubleshooting, currently only showing different page and only one button under "main level" page.
Recently I only had one tkinter window with many buttons to toggle pins on my IO pi plus, at this point everything worked well.
Just this week I switched over to multiple pages to give it a smoother appearance.
The problem I am encountering currently is my GUI buttons do not show indication of the pins state of which they are toggling, on or off.
The error I get is " ToggleButton1["text"] = ("Fireplace On")
NameError: name 'toggleButton1' is not defined "
I am assuming this has something to do with classes (which I'm currently trying to comprehend) or even placement.
FYI if you try to run program you will need to change to gpio rather than looking for i2c bus.
Thank you in advance for any insight you may have resolve my issue
import logging import datetime import tkinter from queue import Queue from ABE_helpers import ABEHelpers from ABE_IoPi import IoPi import RPi.GPIO as GPIO import time from time import sleep, localtime, strftime import http.client, urllib from tkinter import* import tkinter as tk import io import base64 from urllib.request import urlopen import math import threading import _thread import os from tkinter import font as tkfont GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) pinList = [29, 31, 33, 35, 37, 32, 36, 38, 40] for i in pinList: GPIO.setup(i, GPIO.OUT) GPIO.output(i, GPIO.HIGH) class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic") self.title_font2 = tkfont.Font(family='Helvetica', size=10, weight="bold") self.title_font3 = tkfont.Font(family='Helvetica', size=12, weight="bold") self.title_font4 = tkfont.Font(family='Helvetica', size=10, weight="bold") 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, Mainfloor, Upstairs, Basement, Yard): page_name = F.__name__ frame = F(parent=container, controller=self) self.frames[page_name] = frame 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() ##################################### #Fireplace class Fireplace(): def __init__(self): if (bus1.read_pin(15) == 1): bus1.write_pin(15, 0) toggleButton1["text"] = ("Fireplace On") else: bus1.write_pin(15, 1) toggleButton1["text"] = ("Fireplace Off") #################################### class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller controller.attributes('-zoomed', True) label2 = tk.Label(self, text= "Select a Page to View", font=controller.title_font4) label2.place(x=290, y=60) button1 = tk.Button(self, text="Main Floor", width=15, height=5, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Mainfloor")) button2 = tk.Button(self, text="Upstairs", width=15, height=5, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Upstairs")) button3 = tk.Button(self, text="Basement", width=15, height=5, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Basement")) button4 = tk.Button(self, text="Yard Lighting", width=15, height=5, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Yard")) button1.place(x=200, y=100) button2.place(x=200, y=200) button3.place(x=400, y=100) button4.place(x=400, y=200) class Mainfloor(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="Main Floor View", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button0 = tk.Button(self, text="Home Page", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("StartPage")) button1 = tk.Button(self, text="Main Floor", width=15, font=controller.title_font2, bg= 'black', fg= 'yellow', command=lambda: controller.show_frame("Mainfloor")) button2 = tk.Button(self, text="Upstairs", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Upstairs")) button3 = tk.Button(self, text="Basement", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Basement")) button4 = tk.Button(self, text="Yard Lighting", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Yard")) ##############fireplace button toggleButton1 = Button(self, text=("Fireplace"), width=7, height=3, bg= 'white', font=controller.title_font3, relief="raised", command=Fireplace) button0.place(x=5, y=105) button1.place(x=5, y=135) button2.place(x=5, y=165) button3.place(x=5, y=195) button4.place(x=5, y=225) toggleButton1.place(x=355,y=140) class Upstairs(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="Upstairs View", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button0 = tk.Button(self, text="Home Page", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("StartPage")) button1 = tk.Button(self, text="Main Floor", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Mainfloor")) button2 = tk.Button(self, text="Upstairs", width=15, font=controller.title_font2, bg= 'black', fg= 'yellow', command=lambda: controller.show_frame("Upstairs")) button3 = tk.Button(self, text="Basement", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Basement")) button4 = tk.Button(self, text="Yard Lighting", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Yard")) button0.place(x=5, y=105) button1.place(x=5, y=135) button2.place(x=5, y=165) button3.place(x=5, y=195) button4.place(x=5, y=225) class Basement(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="Basement View", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button0 = tk.Button(self, text="Home Page", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("StartPage")) button1 = tk.Button(self, text="Main Floor", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Mainfloor")) button2 = tk.Button(self, text="Upstairs", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Upstairs")) button3 = tk.Button(self, text="Basement", width=15, font=controller.title_font2, bg= 'black', fg= 'yellow', command=lambda: controller.show_frame("Basement")) button4 = tk.Button(self, text="Yard Lighting", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Yard")) button0.place(x=5, y=105) button1.place(x=5, y=135) button2.place(x=5, y=165) button3.place(x=5, y=195) button4.place(x=5, y=225) class Yard(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="Yard View", font=controller.title_font) label.place(x=350, y=40) button0 = tk.Button(self, text="Home Page", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("StartPage")) button1 = tk.Button(self, text="Main Floor", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Mainfloor")) button2 = tk.Button(self, text="Upstairs", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Upstairs")) button3 = tk.Button(self, text="Basement", width=15, font=controller.title_font2, bg= 'white', command=lambda: controller.show_frame("Basement")) button4 = tk.Button(self, text="Yard Lighting", width=15, font=controller.title_font2, bg= 'black', fg= 'yellow', command=lambda: controller.show_frame("Yard")) button0.place(x=5, y=105) button1.place(x=5, y=135) button2.place(x=5, y=165) button3.place(x=5, y=195) button4.place(x=5, y=225) if __name__ == "__main__": app = SampleApp() app.mainloop()