Advertisement
ElliotDG

Untitled

Feb 22nd, 2025
311
0
179 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | None | 0 0
  1. from kivymd.app import MDApp
  2. from kivy.lang import Builder
  3. from kivymd.uix.screenmanager import MDScreenManager
  4. from kivymd.uix.screen import MDScreen
  5. from kivymd.uix.pickers import MDDockedDatePicker
  6. from kivy.properties import StringProperty
  7. from kivy.metrics import dp
  8.  
  9. kv = """
  10. <LabelScreen@MDScreen>:
  11.    md_bg_color: self.theme_cls.backgroundColor
  12.    MDLabel:
  13.        text: root.manager.date  # display the date
  14.        halign: 'center'
  15.    MDButton:
  16.        pos_hint: {'center_x': .5, 'bottom': 1 }
  17.        on_release: root.manager.current = 'date screen'
  18.        
  19.        MDButtonText:
  20.            text: "Change Screen"  
  21.    
  22. <DateScreen>:
  23.    md_bg_color: self.theme_cls.backgroundColor
  24.    MDTextField:
  25.        id: field
  26.        mode: "outlined"
  27.        pos_hint: {'center_x': .5, 'center_y': .85}
  28.        size_hint_x: .5
  29.        on_focus: root.show_date_picker(self.focus)
  30.  
  31.        MDTextFieldHintText:
  32.            text: "Docked date picker"
  33.  
  34.        MDTextFieldHelperText:
  35.            text: "MM/DD/YYYY"
  36.            mode: "persistent"
  37.  
  38.        MDTextFieldTrailingIcon:
  39.            icon: "calendar"
  40.            
  41.    MDButton:
  42.        pos_hint: {'center_x': .5, 'bottom': 1 }
  43.        on_release: root.manager.current = 'label screen'
  44.  
  45.        MDButtonText:
  46.            text: "Change Screen"
  47.  
  48.            
  49. MDBoxLayout:
  50.    orientation: 'vertical'
  51.    md_bg_color: self.theme_cls.backgroundColor
  52.    MDLabel:
  53.        text: 'Share data between two screens'
  54.        size_hint_y: None
  55.        height: dp(30)
  56.        halign: 'center'
  57.    SharedScreenManager:
  58.        DateScreen:
  59.            name: 'date screen'
  60.        LabelScreen:
  61.            name: 'label screen'
  62. """
  63.  
  64.  
  65. class SharedScreenManager(MDScreenManager):
  66.     date = StringProperty()  # create a kivy property to share between the screens
  67.  
  68.  
  69. class DateScreen(MDScreen):
  70.     def __init__(self, **kwargs):
  71.         super().__init__(**kwargs)
  72.         self.date_dialog = None # used to hold the date picker
  73.  
  74.     def show_date_picker(self, focus):
  75.         if not focus:
  76.             return
  77.         self.date_dialog = MDDockedDatePicker()
  78.         # You have to control the position of the date picker dialog yourself.
  79.         self.date_dialog.pos = [
  80.             self.ids.field.center_x - self.date_dialog.width / 2,
  81.             self.ids.field.y - (self.date_dialog.height + dp(32)),
  82.         ]
  83.         self.date_dialog.bind(on_ok=self.on_date_selected)
  84.         self.date_dialog.bind(on_cancel=lambda x: self.date_dialog.dismiss())
  85.         self.date_dialog.open()
  86.  
  87.     def on_date_selected(self, selected):
  88.         date = selected.get_date()[0].strftime('%m/%d/%Y')
  89.         self.manager.date = date
  90.         self.ids.field.text = date
  91.         self.date_dialog.dismiss()
  92.  
  93.  
  94. class SharedDataApp(MDApp):
  95.     def build(self):
  96.         self.theme_cls.primary_palette = "Olive"
  97.         return Builder.load_string(kv)
  98.  
  99.  
  100. SharedDataApp().run()
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement