如何在Python Atomclass中更改datetime,或为其创建setter?

2024-06-16 12:40:22 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我是GUI编程新手,所以在尝试了PyQt一小段时间后,我发现了Enaml,这使得生产更加容易。在

我正在尝试一个小部件,它可以改变日期时间。日期时间对象或日期时间.time对象,但结果它们是只读的。那我怎么能做到呢?或者需要一个setter来改变属性,或者我可以写一个变量?在

我的最低工作解决方案是:

from __future__ import print_function
import datetime
import os

from atom.api import Atom, Unicode, Range, Typed, observe, Value, Bool

class SimulationCase(Atom):

    startDateTime = datetime.datetime.strptime('05.03.2015-5','%d.%m.%Y-%H')
    currentDateTime = startDateTime
    endDateTime = startDateTime+ datetime.timedelta(days=int(5))
    incrementTime = datetime.time(1,0,0)

def main():
    case = SimulationCase()

    print(case.currentDateTime)

    a = datetime.time(1,0,0)
    print(a)

    #This is where the problem occures, comment out the line under for a working solution.
    case.incrementTime = a


if __name__ == '__main__':
    main()

Tags: the对象fromimportdatetimetimemain时间
2条回答

你的解决方案不正确。使用成员类型在Atom类中创建成员,然后可以通过普通的__getattr__机制访问和设置这些成员。在

示例代码的正确示例:

from __future__ import print_function
import datetime
import os

from atom.api import Atom, Unicode, Range, Typed, observe, Value, Bool

def default_time_factory():
    return datetime.datetime.strptime('05.03.2015-5','%d.%m.%Y-%H')

class SimulationCase(Atom):

    startDateTime   = Typed( datetime.datetime, factory=default_time_factory )
    currentDateTime = Typed( datetime.datetime, factory=default_time_factory )
    endDateTime     = Typed( datetime.datetime, default=default_time_factory()+datetime.timedelta(days=int5) )
    incrementTime   = Typed( datetime.time,     default=datetime.time(1,0,0) )

def main():
    case = SimulationCase()

    print(case.currentDateTime)

    a = datetime.time(1,0,0)
    print(a)

    #This now works
    case.incrementTime = a


if __name__ == '__main__':
    main()

我找到了一个基于属性.py原子核开发团队的文件。 设置程序可以通过添加一个带有集变量(self,variable)\u get_variable(self):的函数来完成 因此,一个可能的解决方案是:

from __future__ import print_function
import datetime
import os

from atom.api import Atom, Unicode, Range, Typed, observe, Value, Bool, Property

class SimulationCase(Atom):

    startDateTime = Property()
    _startDateTime = Typed(datetime.datetime)

    currentDateTime = Property()
    _currentDateTime = Typed(datetime.datetime)

    endDateTime = Property()
    _endDateTime = Typed(datetime.datetime)

    incrementTime = Property()
    _incrementTime = Typed(datetime.time)

    # Getter and setter for startDateTime
    def _set_startDateTime(self,startDateTime):
        self._startDateTime = startDateTime

    def _get_startDateTime(self):
        return self._startDateTime

    # Getter and setter for currentDateTime
    def _set_currentDateTime(self,currentDateTime):
        self._currentDateTime = currentDateTime

    def _get_currentDateTime(self):
        return self._currentDateTime

    # Getter and setter for endDateTime
    def _set_endDateTime(self,endDateTime):
        self._endDateTime = endDateTime

    def _get_endDateTime(self):
        return self._endDateTime

    # Getter and setter for incrementTime
    def _set_incrementTime(self,incrementTime):
        self._incrementTime = incrementTime

    def _get_incrementTime(self):
        return self._incrementTime

    # Populating the data
    def __init__(self):
        self._startDateTime = datetime.datetime.strptime('05.03.2015-5','%d.%m.%Y-%H')
        self._currentDateTime = self._startDateTime
        self._endDateTime = self._startDateTime + datetime.timedelta(days=int(5))
        self._incrementTime = datetime.time(1,0,0)



def main():
    case = SimulationCase()

    print(case.currentDateTime)
    print(case.incrementTime)
    print(case.endDateTime)

    a = datetime.time(2,0,0)

    case.incrementTime = a
    print(case.incrementTime)



if __name__ == '__main__':
    main()

相关问题 更多 >