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()
