omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Form_Dialog datetime type with year

    Pythonista
    2
    2
    1643
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • cvp
      cvp last edited by

      For people like @Grun6 who write their own Form_Dialog, the datetime field type does not really allow to select the year, but only month/day/hour/minute.
      With this modification, this code creates one date picker AND one time picker and so the user can really also select the year.

      def show_datepicker(self, mode):
      		ui.end_editing()
      		self.shield_view = ui.View()
      		self.shield_view.flex = 'WH'
      		self.shield_view.frame = (0, 0, self.view.width, self.view.height)
      		
      		self.dismiss_datepicker_button = ui.Button()
      		self.dismiss_datepicker_button.flex = 'WH'
      		self.dismiss_datepicker_button.frame = (0, 0, self.view.width, self.view.height)
      		self.dismiss_datepicker_button.background_color = (0, 0, 0, 0.5)
      		self.dismiss_datepicker_button.action = self.dismiss_datepicker
      		self.dismiss_datepicker_button.alpha = 0.0
      		self.shield_view.add_subview(self.dismiss_datepicker_button)
      
      		self.date_picker = ui.DatePicker()
      		self.date_picker.date = self.selected_date_value
      		self.date_picker.background_color = 'white'
      		if mode == ui.DATE_PICKER_MODE_DATE_AND_TIME:
      			self.date_picker.mode = ui.DATE_PICKER_MODE_DATE
      			w = self.shield_view.width/2
      		else:
      			self.date_picker.mode = mode
      			w = self.shield_view.width
      		self.date_picker.frame = (0, self.shield_view.height - self.date_picker.height, w, self.date_picker.height)
      		self.date_picker.flex = 'TW'
      		self.date_picker.transform = ui.Transform.translation(0, self.date_picker.height)
      		self.shield_view.add_subview(self.date_picker)
      
      		if mode == ui.DATE_PICKER_MODE_DATE_AND_TIME:		
      			self.time_picker = ui.DatePicker()
      			self.time_picker.date = self.selected_date_value
      			self.time_picker.background_color = 'white'
      			self.time_picker.mode = ui.DATE_PICKER_MODE_TIME
      			self.time_picker.frame = (w, self.shield_view.height - self.time_picker.height, w, self.date_picker.height)
      			self.time_picker.flex = 'TW'
      			self.time_picker.transform = ui.Transform.translation(0, self.time_picker.height)
      			self.shield_view.add_subview(self.time_picker)
      
      		self.container_view.add_subview(self.shield_view)
      		
      		def fade_in():
      			self.dismiss_datepicker_button.alpha = 1.0
      			self.date_picker.transform = ui.Transform.translation(0, 0)
      			if hasattr(self,'time_picker'):
      				self.time_picker.transform = ui.Transform.translation(0, 0)
      		ui.animate(fade_in, 0.3)
      
      	def dismiss_datepicker(self, sender):
      		value = self.date_picker.date
      		if hasattr(self,'time_picker'):
      			value_time = self.time_picker.date
      			# store time of value_time in value
      			date_str = datetime.datetime.strftime(value,'%Y:%m:%d %H:%M:%S')
      			time_str = datetime.datetime.strftime(value_time,'%Y:%m:%d %H:%M:%S')
      			date_str = date_str[:10] + time_str[10:]
      			value = datetime.datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
      		
      		if self.selected_date_type == 'date':
      			self.selected_date_cell.detail_text_label.text = value.strftime(self.selected_date_format)
      		elif self.selected_date_type == 'time':
      			self.selected_date_cell.detail_text_label.text = value.strftime(self.selected_date_format)
      		else:
      			self.selected_date_cell.detail_text_label.text = value.strftime(self.selected_date_format)
      
      		self.values[self.selected_date_key] = value
      		
      		def fade_out():
      			self.dismiss_datepicker_button.alpha = 0.0
      			self.date_picker.transform = ui.Transform.translation(0, self.date_picker.height)
      			if hasattr(self,'time_picker'):
      				self.time_picker.transform = ui.Transform.translation(0, self.time_picker.height)
      
      1 Reply Last reply Reply Quote 0
      • Grun6
        Grun6 last edited by

        Nice modification @cvp

        1 Reply Last reply Reply Quote 0
        • First post
          Last post
        Powered by NodeBB Forums | Contributors