• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] gdesklet Script (Zeitanzeige)

motu

Member
Guten Abend

Ich habe ein Problem mit dem World Clock / World Time Desklet! Ich habe für mich das Desklet so angepasst, dass in der ersten Zeile die Zeit und in der zweiten Zeile der Tag (als Wort) und dann das genaue Datum (also Tag.Monat.Jahr) angezeigt wird. Leider habe ich das Problem, dass der Tag (als Zahl) immer um 12.00 Uhr wechselt. Das heisst also, dass z.B. heute Mittag um zwölf vom 10.10.2007 auf den 11.10.2007 gewechselt wurde. Der Tag "als Wort" stimmt komischer weise.
Ich füge hier mal den Teil des Skripts ein, von welchem ich vermute, wo der Fehler liegen müsste. Leider weiss ich nicht wo er ist :? !

# update time info
def do_time(value):

for i in range(6):
mytime.timezone = Dsp.zone.value
h, m, s = mytime.time
Dsp.sclock.value = "%02d:%02d:%02d" % (h, m, s)
Dsp.clock.value = "%02d:%02d:%02d" % (h, m, s)


# update timezone info
def do_date(value):

y, m, d = value

for i in range(6):
time.timezone = Dsp.zone.value
Dsp.sdate.value = cal.day +", %02d.%02d.%02d" % (d, m, y)
Dsp.date.value = cal.day +", %02d.%02d.%02d" % (d, m, y)


# start program
cal.time = time
mytime.bind("date", do_date)
do_date(time.date)
mytime.bind("time", do_time)
#get_lfonts(lfonts)
#get_dcfonts(dcfonts)


Diesen Teil des Skripts habe ich angepasst:

Dsp.sdate.value = cal.day +", %02d.%02d.%02d" % (d, m, y)
Dsp.date.value = cal.day +", %02d.%02d.%02d" % (d, m, y)


Die Systemzeit resp. -datum stimmt, das habe ich via Yast kontrolliert.
Kennt sich vielleicht jemand mit dieser Art Skript aus und kann mir sagen wie ich den Fehler korrigieren kann?



motu


PS: hoffe habe das richtige Forum erwischt :roll:
 

abgdf

Guru
Hi,

das sieht nach (meiner Lieblingssprache) Python

http://www.angelfire.com/linux/tux25/python.html

aus. Da sind aber die Einrückungen von Bedeutung !

Außerdem muß ich mir da erstmal das ganze Skript anschauen.

Viele Grüße
 
OP
M

motu

Member
Hallo

Das wäre natürlich genial wenn Du mir weiterhelfen könntest! Das mit den Einrückungen wusste ich nicht (wusste nicht mal, dass es sich um Python handelt :? ). Habe es kurz mit deinem Link versucht, bis jetzt aber ohne Erfolg. Werde es aber morgen nochmals versuchen.



motu
 

abgdf

Guru
Hmmm, kriege gDesklets nicht ohne weiteres auf meinem SuSE 10.0 installiert.

Bist Du sicher, daß vielleicht nicht nur Deine Uhr verstellt ist ? Bitte führe doch einfach mal
Code:
date
und/oder

http://www.angelfire.com/linux/tux25/python.html#7

aus (bitte JavaScript ausschalten, wenn Du meine Seite ansehen willst (ist halt kostenloser Webspace mit sonst viel Werbung)).

Viele Grüße
 
OP
M

motu

Member
Denke die Uhr müsste richtig eingestellt sein. Im Moment geht sie jedenfalls korrekt:

Code:
Do 11. Okt 07:33:19 CEST 2007

Werde aber heute um 12.00 Uhr nochmals nachschauen.



motu
 
OP
M

motu

Member
mmm... wieso geht jetzt die Zeit immer noch korrekt :evil: :shock: :?: :? ???

Jetzt ging die Zeit wochenlang falsch und jetzt wo's drauf an kommt funktionierts plötzlich :evil: ! Na ja, vielleicht wurde das Desklet durch meine Manipulationen am Skript (das jetzt wieder wie zuvor ist) beeindruckt :lol: ...

Mal schauen, evtl. siehts nach einem Neustart anders aus...



motu

Edit: Mit Zeit ist natürlich das Datum gemeint :lol:
 
OP
M

motu

Member
Ah ha... jetzt ist es wieder soweit :roll: ! Ich habe zwar den Zeitpunkt verpasst aber jetzt wird wieder der 12. anstatt der 11. angezeigt...

Die Zeit scheint aber richtig eingestellt zu sein. Die Ausgabe von Date ist folgende:

Code:
Do 11. Okt 16:56:25 CEST 2007
 
OP
M

motu

Member
Habe noch etwas festgestellt. Wenn ich den Code wie folgt anpasse, gibt es zwar einen Fehler (name 'date' is not defined) und die Zeit wird nicht mehr angezeigt aber dafür stimmt dann das Datum (in der 4. Zeile habe ich time.date mit date ersetzt).

Code:
# start program
cal.time = time
mytime.bind("date", do_date)
do_date(date)
mytime.bind("time", do_time)
#get_lfonts(lfonts)
#get_dcfonts(dcfonts)

Mir ist auch aufgefallen, dass wenn ich das Desklet starte kurz der richtige Tag angezeigt wird, dann aber sofort wechselt.

Vielleicht nützt das ja zur Problemlösung!?



motu
 
OP
M

motu

Member
Hab den Code jetzt wie folgt angepasst:

Code:
# start program
cal.time = time
mytime.bind("time", do_time)
do_date(time.date)
#get_lfonts(lfonts)
#get_dcfonts(dcfonts)

Scheint so zu klappen, jedenfalls wird das richtige Datum angezeigt, und die Zeit funktioniert auch! Oder sehe ich das falsch?

Ich warte noch ein, zwei Tage und dann kann ich dieses Thema hoffentlich definitiv als gelöst markieren! :D



motu
 

abgdf

Guru
Hi,

hab gDesklets jetzt doch installiert bekommen.

Mit dem rechten Mousebutton auf dem WorldTime-Desklet kann man ja allerhand Einstellungen vornehmen: Wieviele Uhren gezeigt werden sollen und welche Zeitzone jeweils gelten soll.

Hast Du da auch brav "Europe/Berlin" für Deine Uhr ausgewählt ?

Ansonsten blödes Problem: Diese "worldtime.script"-Datei ist kein ganz "reines" Python, sondern Skript-Code, der lediglich von dem übrigen Code eingelesen und verarbeitet wird. Irgendwie komme ich an den Output von "print"-Befehlen aus dieser ".script"-Datei nicht ran :cry:.

Ich würde die Funktionsaufrufe lieber unangetastet lassen, sonst könnte es passieren, daß das Datum überhaupt nicht aktualisiert wird.

Viele Grüße
 
OP
M

motu

Member
Hallo abgdf

Deine Vermutung war korrekt. Wenn der Code wie in meinem letzten Posting ist, wird das Datum nicht mehr automatisch aktualisiert. Habe jetzt das "bind" wieder rein geschrieben.

Code:
# start program
cal.time = time
mytime.bind("time", do_time)
time.bind("date", do_date)
do_date(time.date)
#get_lfonts(lfonts)
#get_dcfonts(dcfonts)

Jetzt ist zwar der Code (bis auf die Reihenfolge) wieder identisch, aber vielleicht nützt's ja was!?

Mit den Zeitzonen habe ich es übrigens auch schon probiert, leider ohne Erfolg.



motu
 

abgdf

Guru
Hi,

ich konnte Dein Problem jetzt nachvollziehen und habe eine Lösung (Advanced Hacking :mrgreen:).
Ich hole mir das Datum direkt vom time-Modul wie in dem Beispiel auf meiner Seite (s.o.):

Also, so geht's: Ersetze die Datei

/opt/gnome/share/gdesklets/Controls/Calendar/__init__.py

als root (nach Anfertigung einer Sicherungskopie) durch folgenden Code:
Code:
from libdesklets.controls import Control

from ICalendar import ICalendar

import calendar
import time
import datetime

class Calendar(Control, ICalendar):

    # Monday, 13th of December 2004
    __DAYS = tuple([ time.strftime('%A', datetime.date(2004, 12, 13 + d).timetuple())
                     for d in range(0, 7) ])



    __MONTHS = tuple([ time.strftime('%B', datetime.date(2004, m, 1).timetuple())
                       for m in range(1, 13) ])


    __REALDATE = time.strftime("%d.%m.%Y")


    def __init__(self):
        self.__time = None
        Control.__init__(self)


    def __get_days(self):
        return self.__DAYS


    def __get_months(self):
        return self.__MONTHS


    def __set_time(self, time):

        assert 'ITime:9y703dqtfnv4w373caserz68r' in time.get_interfaces_id()
        self.__time = time


    def __ymd(self):
        return self.__time.date
    

    def __get_day(self):
        wd = calendar.weekday( *self.__ymd() )
        return self.__DAYS[ wd ]


    def __get_month(self):
        return self.__MONTHS[ self.__ymd()[1] - 1 ]


    def __get_realdate(self):
        return self.__REALDATE


    day    = property(fget = __get_day)
    days   = property(fget = __get_days)
    month  = property(fget = __get_month)
    months = property(fget = __get_months)
    time   = property(fset = __set_time)

    realdate = property(fget = __get_realdate)

def get_class(): return Calendar
Dann editiere den bekannten, letzten Teil von

~/.gdesklets/Displays/WorldTime-v0.9.2/worldtime.script

zu
Code:
# update time info
def do_time(value):

	for i in range(6):
		mytime.timezone = Dsp.zone[i].value
		h, m, s = mytime.time
		Dsp.sclock[i].value = "%02d:%02d:%02d" % (h, m, s)
		Dsp.clock[i].value = "%02d:%02d:%02d" % (h, m, s)

		
# update timezone info
def do_date(value):

	y, m, d = value
		
	for i in range(6):
		time.timezone = Dsp.zone[i].value
		Dsp.sdate[i].value = cal.day + ", " + cal.realdate
		Dsp.date[i].value = cal.day  + ", " + cal.realdate


# start program

cal.time = time
mytime.bind("date", do_date)
do_date(time.date)
mytime.bind("time", do_time)

#get_lfonts(lfonts)
#get_dcfonts(dcfonts)
Dann mach' nochmal
Code:
gdesklets restart
Dann sollte es klappen :cool:.

Viele Grüße
 
OP
M

motu

Member
Hi abgdf

Vielen Dank für die Hilfe! :D

Bis jetzt scheint alles bestens zu funktionieren. Um diese Zeit wäre ja zuvor das Datum bereits wieder einen Tag nach vorn gesprungen.

Ich denke ich kann das Thema getrost auf gelöst setzten, denn so wies aussieht, ist Python zurecht Deine Lieblingssprache 8) !



motu
 
Oben