Seite 1 von 1

Wecker mit tkinter

Verfasst: Freitag 22. Dezember 2017, 13:26
von pytn
ich habe versucht einen wecker der seine farbe ändert (habe keine sounds) zu programmieren. Er sollte zur eingegebenen zeit rot werden.
mit einer checkbox sollte man ihn ausmachen können:

Code: Alles auswählen

from tkinter import *
from time import asctime

def an(z):
    t = asctime()
    if z in t:
        l.config(bg='red')
        lb.config(bg='red')

f = Tk()
a = IntVar()
l = Label(master=f, text='Weckzeit angeben:',bg='light blue')
lb = Label(master=f, text='ss:mm(:ss)', bg='light blue')
w = Entry(master=f, width=6)
c = Checkbutton(master=f, text='An', variable=a, onvalue=0, offvalue=1)

while a == 0:
    an(w)

l.pack()
lb.pack()
w.pack()
c.pack()
f.mainloop()
leider ändert sich nichts zur angegebenen zeit :K :roll: :x
könnt ihr mir helfen?
mfg pytn

Re: Wecker mit tkinter

Verfasst: Freitag 22. Dezember 2017, 13:53
von Sirius3
@pytn: Du scheinst auf Abkürzungen zu stehen, aber beim Programmieren haben die nichts verloren. Da sollte der Code aus aussagekräftig sein wie möglich, und ein oder zweibuchstabige Variablennamen sind das nicht. Es ist eine schlechte Idee, etwas zu programmieren und zu hoffen, der Computer wird das schon irgendwie verstehen, weil man es selbst sprachlich so verstehen würde. Die while-Schleife wird z.b. nie betreten, weil a nie 0 ist (ist auch besser so, weil GUI und while sich nicht vertragen). Ebenso ist `z in t` für Dich vielleicht klar, was das macht, für mich und den Computer aber nicht.

Re: Wecker mit tkinter

Verfasst: Samstag 23. Dezember 2017, 15:07
von pytn
Sirius3 hat geschrieben:@pytn: Du scheinst auf Abkürzungen zu stehen, aber beim Programmieren haben die nichts verloren. Da sollte der Code aus aussagekräftig sein wie möglich, und ein oder zweibuchstabige Variablennamen sind das nicht. Es ist eine schlechte Idee, etwas zu programmieren und zu hoffen, der Computer wird das schon irgendwie verstehen, weil man es selbst sprachlich so verstehen würde. Die while-Schleife wird z.b. nie betreten, weil a nie 0 ist (ist auch besser so, weil GUI und while sich nicht vertragen). Ebenso ist `z in t` für Dich vielleicht klar, was das macht, für mich und den Computer aber nicht.
Danke für die Antwort. Leider weiß ich jetzt immer noch nicht wie man das Ganze zum laufen bringen kann :?: ich probier nochmal ein bisschen rum. Jetzt merke ich erst wie gut das ist zu sehen was die Variablen machen. Ich bin trotzdem noch ein Fan davon das Programm ein bisschen zu verkürzen. :)

Re: Wecker mit tkinter

Verfasst: Samstag 23. Dezember 2017, 15:20
von kbr
pytn hat geschrieben:Ich bin trotzdem noch ein Fan davon das Programm ein bisschen zu verkürzen.
Das kann eine gute Idee sein, wenn es darum geht, ob ein Programm 3000 oder 300 Zeilen umfasst. Es ist aber eine schlechte, wenn es darum geht, aussagekräftige Labels auf kurze und damit oft kryptische Bezeichner zu reduzieren. Das Programm wird dadurch weder schneller, noch ist der (oft nur vermeintlich) eingesparte Speicherplatz relevant.

Re: Wecker mit tkinter

Verfasst: Samstag 23. Dezember 2017, 20:06
von wuf
Hi pytn

Hier etwas Code für dein Wecker Studium:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from time import strftime

try:
    # Tkinter for Python 2.xx
    import Tkinter as tk
except ImportError:
    # Tkinter for Python 3.xx
    import tkinter as tk

APP_TITLE = "Wecker mit Tkinter"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 300
APP_HEIGHT = 200

LABEL_01_FONT = ('Helevtica', 14, 'bold')
LABEL_BG = 'light blue'
LABEL_ALARM_BG = 'red'

class Application(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, master)

        self.act_time_var = tk.StringVar()
        tk.Label(self, textvariable=self.act_time_var, font=LABEL_01_FONT,
            fg='green').pack()

        label_frame = tk.Frame(self, bg=LABEL_BG, padx=2, pady=2)
        label_frame.pack(pady=4)
        
        self.label_01 = tk.Label(label_frame, text='Weckzeit angeben:',
            font=LABEL_01_FONT, bg=LABEL_BG)
        self.label_01.pack()
        
        self.label_02 = tk.Label(label_frame, text='ss:mm(:ss)', bg=LABEL_BG)
        self.label_02.pack()
        
        entry_frame = tk.Frame(self)
        entry_frame.pack(pady=4)
        
        self.entry_std = tk.Entry(entry_frame, width=2)
        self.entry_std.pack(side='left')
        
        self.entry_min = tk.Entry(entry_frame, width=2)
        self.entry_min.pack(side='left')

        self.entry_sec = tk.Entry(entry_frame, width=2)
        self.entry_sec.pack(side='left')
 
        self.alarm_set_var = tk.IntVar()
        self.checkbox = tk.Checkbutton(self, text='An', onvalue=1, offvalue=0,
            variable=self.alarm_set_var)
        self.checkbox.pack(expand=True)
        
        self.alarm_flag = False
        self.label_frame = label_frame
        
        self.update_time()
        
    def update_time(self):
        act_time = strftime('%H:%M:%S')
        self.act_time_var.set(act_time)
        alarm_time = "{}:{}:{}".format(
            self.entry_std.get(),
            self.entry_min.get(),
            self.entry_sec.get())
                    
        if self.alarm_set_var.get():
            if alarm_time == act_time:
                self.alarm_display(True)
                
        else:
            if self.alarm_flag:
                self.alarm_display(False)
                     
        self.after(100, self.update_time)

    def alarm_display(self, alarm=False):
        self.alarm_flag = alarm
        if alarm:
            self.label_frame['bg'] = LABEL_ALARM_BG
            self.label_01['bg'] = LABEL_ALARM_BG
            self.label_02['bg'] = LABEL_ALARM_BG
        else:
            self.label_frame['bg'] = LABEL_BG
            self.label_01['bg'] = LABEL_BG
            self.label_02['bg'] = LABEL_BG

        
def main():
    app_win = tk.Tk()
    app_win.title(APP_TITLE)
    app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
    app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
    
    app = Application(app_win).pack(expand=True)
    
    app_win.mainloop()
 
 
if __name__ == '__main__':
    main()      
Viel Spass beim experimentieren.
Gruss wuf :wink:

Re: Wecker mit tkinter

Verfasst: Dienstag 2. Januar 2018, 16:02
von pytn
danke und entschuldigung wegen dem langen warten. leider hatte ich nur noch zeit nach antworten zu schauen dann musste ich woanders hinfahren. ein frohes neues jahr an alle