Python Forum
[Tkinter] Creating a dashboard for a Pi that switches feeds. - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [Tkinter] Creating a dashboard for a Pi that switches feeds. (/thread-32936.html)



Creating a dashboard for a Pi that switches feeds. - mrbojangles1814 - Mar-17-2021

I'm having a hard time getting this to work. I have a Raspberry Pi with a 4 inch screen that I am trying to make a display that shows the time and then when you click it switches to the cpu temperature. Right now it displays right but when I click it goes into a loop of the two functions I made. Any help would be great!

from tkinter import *
from tkinter import ttk
from tkinter import font
from gpiozero import CPUTemperature
import time

cpu = CPUTemperature()
temp = f'{cpu.temperature}'


def quit(*args):
    root.destroy()

def mouseClicked(event):
    txt.set(time.strftime("%H :%M :%S"))
    root.after(1000,show_time)
    
    
def show_time():
    txt.set(time.strftime("%H :%M :%S"))
    root.after(1000,show_time)

def show_temp():
    txt.set(f'{cpu.temperature}' + ' C')
    root.after(1000,show_temp)
    
root = Tk()
root.attributes("-fullscreen",True)
root.configure(background='black')
root.bind("<Escape>",quit)
root.bind("<Button-1>",mouseClicked)
root.after(1000,show_temp)

fnt = font.Font(family='Helvetica', size=128, weight='bold')
txt = StringVar()
txt.set(f'{cpu.temperature}' + ' C')
lbl = ttk.Label(root, textvariable=txt, font=fnt, foreground="green", background="black")
lbl.place(relx=0.5, rely=0.5, anchor=CENTER)

root.mainloop()



RE: Creating a dashboard for a Pi that switches feeds. - deanhystad - Mar-18-2021

You should have a function that gets called every second. The function should display the CPU temp or the time based on if the mouse button is pressed. Something like this except it displays temperature instead of "Hello World"
import time
import tkinter as tk

font = ('Helvetica', 128, 'bold')
button_pressed = False

def button_event(event):
    """Call me when mouse button 1 is pressed or relased"""
    global button_pressed
    button_pressed = event.type is tk.EventType.ButtonPress
    update_display()

def update_display():
    """Display time or temperature based on if mouse button 1 is pressed"""
    if button_pressed:
        display['text'] = 'Hello world'
    else:
        display['text'] = time.strftime("%H :%M :%S")

def update_loop():
    """Update display once a second"""
    update_display()
    root.after(1000, update_loop)

root = tk.Tk()
root.configure(bg='black')
root.bind("<Escape>", root.destroy)
root.bind("<Button-1>" , button_event)
root.bind("<ButtonRelease-1>" , button_event)
display = tk.Label(root, font=font, fg="green", bg="black")
display.pack()
update_loop()   # Starts the display update
root.mainloop()
Since the update loop continues to run, this would update the CPU temp every second as long as the mouse button is pressed.