Wecker mit tkinter

Fragen zu Tkinter.
Antworten
pytn
User
Beiträge: 3
Registriert: Freitag 22. Dezember 2017, 13:13

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
pytn
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
pytn
User
Beiträge: 3
Registriert: Freitag 22. Dezember 2017, 13:13

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. :)
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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:
Take it easy Mates!
pytn
User
Beiträge: 3
Registriert: Freitag 22. Dezember 2017, 13:13

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
Antworten