Beispiel #1
0
    def __init__(self, space_game, **kwargs):
        kwargs['orientation'] = 0
        SpaceShip.__init__(self, space_game, **kwargs)
        self.score = 0
        self.gun_fire_interval = 0.1
        if self._keyboard == None and platform not in ("android", "ios"):
            self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
            self._keyboard.bind(on_key_down=self._on_key_down)
            self._keyboard.bind(on_key_up=self._on_key_up)

        self.gun = RepeaterGun(space_game=self.space_game)
        self.add_widget(self.gun)
        self.gun.center_x = self.center_x
        self.gun.center_y = self.center_y
        self.boom = load_sound('sounds/boom.ogg', volume=FX_VOLUME)

        # Add touch events layer
        self.player_speed = Vector(0, 0)
        self.bullet_rate = 0.0
        self.player_motion = None
        self.bullet_fire = None
        touch_layer = FloatLayout(pos_hint=(0, 0), size_hint=(1., 1.))
        touch_layer.bind(
            on_touch_down=self.on_touch_down,
            on_touch_move=self.on_touch_move,
            on_touch_up=self.on_touch_up,
        )
        self.add_widget(touch_layer)

        self._update_event = Clock.schedule_interval(self.update, FPS)
Beispiel #2
0
    def build(self):

        # 设置背景尺寸(布局)
        def update_rect(layout, *args):
            # 布局矩形位置 = 布局位置
            layout.rect.pos = layout.pos
            # 布局矩形大小 = 布局大小
            layout.rect.size = layout.size

        # 浮动布局
        float_layout = FloatLayout()

        # 浮动布局画布锁
        with float_layout.canvas:
            # 背景颜色
            Color(1, 1, 1, 1)
            # 浮动布局矩形 = 矩形(位置=浮动布局位置,大小=浮动布局大小)
            float_layout.rect = Rectangle(pos=float_layout.pos, size=float_layout.size)
            # 浮动布局绑定(位置=布局矩形位置,大小=设置背景尺寸)
            float_layout.bind(pos=update_rect, size=update_rect)

        # 在布局内的300,200处添加一个为布局0.3,0.2大小的按钮
        button = Button(text='Hello FloatLayout', size_hint=(.3, .2), pos=(300, 200))

        # 布局加组件(按钮)
        float_layout.add_widget(button)

        # 返回布局
        return float_layout
Beispiel #3
0
class Test(App):
    def create_clock(self, widget, touch, *args):
        callback = partial(self.menu, touch)
        Clock.schedule_once(callback, 2)
        touch.ud['event'] = callback

    def delete_clock(self, widget, touch, *args):
        Clock.unschedule(touch.ud['event'])

    def menu(self, touch, *args):
        menu = BoxLayout(size_hint=(None, None),
                         orientation='vertical',
                         center=touch.pos)
        menu.add_widget(Button(text='a'))
        menu.add_widget(Button(text='b'))
        close = Button(text='close')
        close.bind(on_release=partial(self.close_menu, menu))
        menu.add_widget(close)
        self.root.add_widget(menu)

    def close_menu(self, widget, *args):
        self.root.remove_widget(widget)

    def build(self):
        self.root = FloatLayout()
        self.root.bind(on_touch_down=self.create_clock,
                       on_touch_up=self.delete_clock)
Beispiel #4
0
    def buildW(self):
        print("ScreenWidgets.buildW")

        print("- screens now count is", self.screens)
        self.fls = []
        self.screenObjs = []
        self.flsOrgs = []
        self.navBts = []
        self.navAddBts = []
        for si in range(self.screens):
            screen = Screen(name="Widgets%s" % si)
            self.screenObjs.append(screen)
            self.flsOrgs.append(None)
            fl = FloatLayout()
            fl.bind(size=self.flChangeSize)
            self.fls.append(fl)
            #fl.add_widget(Label(text="widgets%s"%si))
            #self.flsOrgs[si] = fl.on_touch_down
            #fl.on_touch_down = self.on_touch
            screen.add_widget(fl)

            try:
                self.setUpGui(si, fl, self.wConfig[si])
            except:
                self.setUpGui(si, fl, [])

            self.gui.rl.add_widget(screen)
            self.flChangeSize(b=fl.size)

        print("    DONE")
class Test(App):
    def create_clock(self, widget, touch, *args):
        callback = partial(self.menu, touch)
        Clock.schedule_once(callback, 2)
        touch.ud['event'] = callback

    def delete_clock(self, widget, touch, *args):
        Clock.unschedule(touch.ud['event'])

    def menu(self, touch, *args):
        menu = BoxLayout(
                size_hint=(None, None),
                orientation='vertical',
                center=touch.pos)
        menu.add_widget(Button(text='a'))
        menu.add_widget(Button(text='b'))
        close = Button(text='close')
        close.bind(on_release=partial(self.close_menu, menu))
        menu.add_widget(close)
        self.root.add_widget(menu)

    def close_menu(self, widget, *args):
        self.root.remove_widget(widget)

    def build(self):
        self.root = FloatLayout()
        self.root.bind(
            on_touch_down=self.create_clock,
            on_touch_up=self.delete_clock)
Beispiel #6
0
    def build(self):
    	root = FloatLayout()
    	self.btn = Button()
    	self.btn.pos_hint = {"center_x": .5, "center_y": .5}
    	self.btn.size_hint = [.5, .5]
    	root.add_widget(self.btn)
    	root.bind(on_touch_down=self.check_collision)

    	return root
Beispiel #7
0
 def create_top_bar(self):
     top_bar = FloatLayout(size_hint=(1, None), size=(1000, 60))
     with top_bar.canvas.before:
         top_bar.rect = Image(source=BKGD_LCHRC,
                              keep_ratio=False,
                              allow_stretch=True,
                              size_hint=(1, 1))
     top_bar.bind(pos=self.update_rect, size=self.update_rect)
     self.page_layout.add_widget(top_bar)
     return top_bar
Beispiel #8
0
 def build(self):
     root = FloatLayout()
     renderer = Renderer()
     btn = Button(size_hint=(None, None), size=root.size, text="Hello world", pos=(0, 0), font_size="120dp")
     root.add_widget(btn)
     root.add_widget(renderer)
     #root.add_widget(btn)
     def _on_resize(inst, value):
         btn.size = value
     root.bind(size=_on_resize)
     return root
Beispiel #9
0
 def build(self):
     root = FloatLayout()
     renderer = Renderer()
     btn = Button(size_hint=(None, None), size=root.size, text="Hello world", pos=(0, 0), font_size="120dp")
     root.add_widget(btn)
     root.add_widget(renderer)
     #root.add_widget(btn)
     def _on_resize(inst, value):
         btn.size = value
     root.bind(size=_on_resize)
     return root
class ForestFireDetect(App):
    icon = 'flame-icon.png'
    

    
    
    
    def create_clock(self, widget, touch, *args):
        callback = partial(self.menu, touch)
        Clock.schedule_once(callback, 2)
        touch.ud['event'] = callback

    def delete_clock(self, widget, touch, *args):
        Clock.unschedule(touch.ud['event'])

    def menu(self, touch, *args):
        menu = BoxLayout(
                size_hint=(None, None),
                orientation='vertical',
                center=touch.pos)
        
        Button1 = Button(text='C: Forest Fire Analysis of Gujarat',size=(2,2))
        Button1.bind(on_release=f)
        
        Button2 = Button(text='B: Global Fire Plot')
        Button2.bind(on_release=g)

        Button3 = Button(text='A: High Res Satellite Image')
        Button3.bind(on_release=h)  
        
        close = Button(text='Close')
        close.bind(on_release=partial(self.close_menu, menu))
        
        menu.add_widget(Button3)
        menu.add_widget(Button2)
        menu.add_widget(Button1)
        menu.add_widget(close)
        
        self.root.add_widget(menu)
        
        

    def close_menu(self, widget, *args):
        self.root.remove_widget(widget)

    def build(self):
        self.root = FloatLayout()
        self.root.bind(
            on_touch_down=self.create_clock,
            on_touch_up=self.delete_clock)
Beispiel #11
0
def loading():
    Window.clearcolor = (1, 140.0 / 255, 15.0 / 255, 0)
    #Window.fullscreen=True
    f = FloatLayout()
    title = Label(text='Trages',
                  markup=True,
                  bold=True,
                  color=(79.0 / 255, 15.0 / 255, 204.0 / 255, 0),
                  font_name='RAVIE.ttf',
                  halign='center',
                  font_size='100dp',
                  padding_y=2 * Window.height / 6)
    img = Image(source='hand.png', keep_data=True)
    img.y = Window.height / 6
    f.bind(on_touch_down=_on_touch_down)
    f.add_widget(title)
    f.add_widget(img)
    return f
Beispiel #12
0
def loading():
        Window.clearcolor=(1,140.0/255,15.0/255,0)
        #Window.fullscreen=True
        f=FloatLayout()
        title = Label(
            text='Trages',
            markup=True,
            bold=True,
            color=(79.0/255,15.0/255,204.0/255,0),
            font_name='RAVIE.ttf',
            halign='center',
            font_size='100dp',
            padding_y=2*Window.height/6
        )       
        img=Image(source='hand.png',keep_data=True)
        img.y=Window.height/6
        f.bind(on_touch_down=_on_touch_down)
        f.add_widget(title)
        f.add_widget(img)
        return f
Beispiel #13
0
class MainScreen(Screen):
    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)

        import Tkinter
        root = Tkinter.Tk()
        self.WIN_WIDTH, self.WIN_HEIGHT = root.winfo_screenwidth(
        ), root.winfo_screenheight()
        self.MIL_WIDTH, self.MIL_HEIGHT = root.winfo_screenmmwidth(
        ), root.winfo_screenmmheight()
        self.PPC = 10. * (float(self.WIN_WIDTH) / self.MIL_WIDTH +
                          float(self.WIN_HEIGHT) / self.MIL_HEIGHT) / 2.
        self.SCREEN_INFO = (self.WIN_WIDTH, self.WIN_HEIGHT, self.MIL_WIDTH,
                            self.MIL_HEIGHT, self.PPC)

        self.capture = cv2.VideoCapture(0)
        self.capture.set(3, self.WIN_WIDTH)
        self.capture.set(4, self.WIN_HEIGHT)

        self.eyeTracker = None
        try:
            self.eyeTracker = pylink.EyeLink('100.1.1.1')
        except:
            self.eyeTracker = None
            print "Could not connect to eye tracker"
        ''' Layout the layouts '''
        self.mainLayout = mainLayout = FloatLayout()
        with mainLayout.canvas.before:
            Color(.8, .8, .8, 1)
            self.background = Rectangle(size=self.size, pos=self.pos)
        mainLayout.bind(pos=self._updateBackground,
                        size=self._updateBackground)

        hgap, vgap = 0.01, 0.01
        self.topLeftLayout = topLeftLayout = PartialLayout(
            size_hint=(.5 - hgap / 2, 0.4 * (1 - 2 * vgap)),
            pos_hint={
                'center_x': 0.25 - hgap / 4,
                'center_y': .804
            })

        self.middleLeftLayout = middleLeftLayout = PartialLayout(
            size_hint=(.5 - hgap / 2, 0.5 * (1 - 2 * vgap)),
            pos_hint={
                'center_x': 0.25 - hgap / 4,
                'center_y': .353
            })

        self.bottomLeftLayout = bottomLeftLayout = PartialLayout(
            size_hint=(.5 - hgap / 2, 0.1 * (1 - 2 * vgap)),
            pos_hint={
                'center_x': 0.25 - hgap / 4,
                'center_y': .049
            })

        self.rightLayout = rightLayout = PartialLayout(size_hint=(.5 -
                                                                  hgap / 2, 1),
                                                       pos_hint={
                                                           'center_x':
                                                           0.75 + hgap / 4,
                                                           'center_y':
                                                           .5
                                                       })

        self.add_widget(mainLayout)
        mainLayout.add_widget(topLeftLayout)
        mainLayout.add_widget(middleLeftLayout)
        mainLayout.add_widget(bottomLeftLayout)
        mainLayout.add_widget(rightLayout)
        ''' Top left layout '''
        saveFolderLabel = Label(text='Save Folder',
                                size_hint=(0.4, 0.25),
                                pos_hint={
                                    'center_x': 0.2,
                                    'center_y': 0.875
                                })
        folderButton = Button(source='Assets/folder.png',
                              size_hint=(None, None),
                              size=(0.05 * self.WIN_HEIGHT,
                                    0.05 * self.WIN_HEIGHT),
                              pos_hint={
                                  'center_x': 0.45,
                                  'center_y': 0.875
                              })
        self.folderText = TextInput(size_hint=(0.5, 0.125),
                                    pos_hint={
                                        'center_x': 0.75,
                                        'center_y': 0.875
                                    })
        subjectIDLabel = Label(text='Subject ID',
                               size_hint=(0.5, 0.25),
                               pos_hint={
                                   'center_x': 0.25,
                                   'center_y': 0.625
                               })
        self.subjectIDText = TextInput(size_hint=(0.5, 0.125),
                                       pos_hint={
                                           'center_x': 0.75,
                                           'center_y': 0.625
                                       })
        calibButton = Button(text='Calibrate Eye Tracker',
                             size_hint=(1, 0.25),
                             pos_hint={
                                 'center_x': 0.5,
                                 'center_y': 0.375
                             })
        checkCamButton = Button(text='Check Camera',
                                size_hint=(1, 0.25),
                                pos_hint={
                                    'center_x': 0.5,
                                    'center_y': 0.125
                                })

        folderButton.background_normal = 'Assets/folder_normal.png'
        folderButton.background_down = 'Assets/folder_down.png'

        topLeftLayout.add_widget(saveFolderLabel)
        topLeftLayout.add_widget(folderButton)
        topLeftLayout.add_widget(self.folderText)
        topLeftLayout.add_widget(subjectIDLabel)
        topLeftLayout.add_widget(self.subjectIDText)
        topLeftLayout.add_widget(calibButton)
        topLeftLayout.add_widget(checkCamButton)
        ''' Middle Left Layout '''
        designerLabel = Label(text='Experiment Designer',
                              size_hint=(1, 0.2),
                              pos_hint={
                                  'center_x': 0.5,
                                  'center_y': 0.9
                              })
        self.asd = asd = AntisaccadeDesigner(size_hint=(1, 0.39),
                                             pos_hint={
                                                 'center_x': 0.5,
                                                 'center_y': 0.6
                                             })
        self.vsd = vsd = VisualSearchDesigner(size_hint=(1, 0.39),
                                              pos_hint={
                                                  'center_x': 0.5,
                                                  'center_y': 0.2
                                              })

        middleLeftLayout.add_widget(designerLabel)
        middleLeftLayout.add_widget(asd)
        middleLeftLayout.add_widget(vsd)
        ''' Bottom Left Layout '''
        startButton = Button(text='Start',
                             size_hint=(0.5, 0.99),
                             pos_hint={
                                 'center_x': 0.5,
                                 'center_y': 0.5
                             })
        bottomLeftLayout.add_widget(startButton)
        ''' Right Layout '''
        self.stimGrid = GridLayout(cols=1, spacing=10, size_hint_y=None)
        self.stimGrid.bind(minimum_height=self.stimGrid.setter('height'))
        with self.stimGrid.canvas.before:
            Color(0, 0, 0, 1)
            self.gridRect = Rectangle(size=self.stimGrid.size,
                                      pos=self.stimGrid.pos)
        self.stimGrid.bind(pos=self._updateGridRect, size=self._updateGridRect)

        flowLabel = Label(text='Experiment Flow',
                          size_hint=(1, 0.1),
                          pos_hint={
                              'center_x': 0.5,
                              'center_y': 0.95
                          })
        scroller = ScrollView(size_hint=(1, 0.7),
                              pos_hint={
                                  'center_x': 0.5,
                                  'center_y': 0.55
                              })
        showButton = Button(text='Hide',
                            size_hint=(0.5, 0.1),
                            pos_hint={
                                'center_x': 0.25,
                                'center_y': 0.15
                            })
        clearButton = Button(text='Clear',
                             size_hint=(0.5, 0.1),
                             pos_hint={
                                 'center_x': 0.75,
                                 'center_y': 0.15
                             })
        randButton = Button(text='Randomize',
                            size_hint=(0.5, 0.1),
                            pos_hint={
                                'center_x': 0.25,
                                'center_y': 0.05
                            })

        scroller.add_widget(self.stimGrid)
        rightLayout.add_widget(flowLabel)
        rightLayout.add_widget(scroller)
        rightLayout.add_widget(showButton)
        rightLayout.add_widget(clearButton)
        rightLayout.add_widget(randButton)
        ''' Other widgets '''
        self.isVisible = True

        self.coverWidget = FloatLayout(size_hint=(1, 0.7),
                                       pos_hint={
                                           'center_x': 0.5,
                                           'center_y': 0.55
                                       })
        with self.coverWidget.canvas.before:
            Color(0, 0, 0, 1)
            self.coverRect = Rectangle(size=self.coverWidget.size,
                                       pos=self.coverWidget.pos)
        self.coverWidget.bind(pos=self._updateCoverRect,
                              size=self._updateCoverRect)
        self.coverWidget.add_widget(
            Label(text='Experiment flow is\ncurrently hidden.',
                  size_hint=(1, 1),
                  pos_hint={
                      'center_x': 0.5,
                      'center_y': 0.5
                  }))

        self.calibrationWidget = FloatLayout(size_hint=(1, 1),
                                             pos_hint={
                                                 'center_x': 0.5,
                                                 'center_y': 0.5
                                             })
        with self.calibrationWidget.canvas.before:
            Color(0, 0, 0, 1)
            self.calibRect = Rectangle(size=self.calibrationWidget.size,
                                       pos=self.calibrationWidget.pos)
        self.calibrationWidget.bind(pos=self._updateCalibOverlay,
                                    size=self._updateCalibOverlay)
        self.coverWidget.add_widget(
            Label(text=CALIB_TEXT,
                  size_hint=(1, 1),
                  pos_hint={
                      'center_x': 0.5,
                      'center_y': 0.5
                  }))
        ''' Object Bindings '''
        folderButton.bind(on_release=self.chooseRootFolder)
        checkCamButton.bind(on_release=self.toCheckCam)
        calibButton.bind(on_release=self.calibrateEyelink)
        self.asd.addButton.bind(on_release=self.addAntisaccade)
        self.vsd.addButton.bind(on_release=self.addVisualSearch)
        startButton.bind(on_release=self.startExperiment)

        showButton.bind(on_release=self.toggleGUI)
        clearButton.bind(on_release=self.clearExperiment)
        randButton.bind(on_release=self.randomizeOrder)

    def chooseRootFolder(self, _):
        pass

    def calibrateEyelink(self, _):
        if not self.eyeTracker is None:
            self.eyeTracker.doTrackerSetup()

    def toCheckCam(self, _):
        self.parent.transition.direction = 'left'
        self.parent.current = 'check_cam'

    def addAntisaccade(self, _):
        stimLabel = StimLabel(text='Antisaccade',
                              size_hint_y=None,
                              height=self.WIN_HEIGHT / 10)
        self.stimGrid.add_widget(stimLabel)

        stimLabel.buttonUp.bind(on_release=self.moveTaskUp)
        stimLabel.buttonDown.bind(on_release=self.moveTaskDown)
        stimLabel.buttonRemove.bind(on_release=self.removeTask)

    def addVisualSearch(self, _):
        text = 'Visual Search\nContrast(s): {}, Stimuli: {}'.format(
            self.vsd.mainContrastButton.text.split(' ')[0],
            self.vsd.mainConditionButton.text.split(' ')[0])
        stimLabel = StimLabel(text=text,
                              size_hint_y=None,
                              height=self.WIN_HEIGHT / 10)
        self.stimGrid.add_widget(stimLabel)

        stimLabel.buttonUp.bind(on_release=self.moveTaskUp)
        stimLabel.buttonDown.bind(on_release=self.moveTaskDown)
        stimLabel.buttonRemove.bind(on_release=self.removeTask)

    def moveTaskUp(self, obj):
        index = self.stimGrid.children.index(obj.parent.parent)
        if index == len(self.stimGrid.children) - 1:
            return
        child = self.stimGrid.children[index]
        self.stimGrid.remove_widget(child)
        self.stimGrid.add_widget(child, index + 1)

    def moveTaskDown(self, obj):
        index = self.stimGrid.children.index(obj.parent.parent)
        if index == 0:
            return
        child = self.stimGrid.children[index]
        self.stimGrid.remove_widget(child)
        self.stimGrid.add_widget(child, index - 1)

    def removeTask(self, obj):
        self.stimGrid.remove_widget(obj.parent.parent)

    def startExperiment(self, _):
        if len(self.stimGrid.children) == 0:
            return

    def toggleGUI(self, _):
        if self.isVisible:
            self.rightLayout.add_widget(self.coverWidget)
        else:
            self.rightLayout.remove_widget(self.coverWidget)
        self.isVisible = not self.isVisible

    def clearExperiment(self, _):
        self.stimGrid.clear_widgets()

    def randomizeOrder(self, _):
        random.shuffle(self.stimGrid.children)

    def _updateBackground(self, instance, _):
        self.background.pos = instance.pos
        self.background.size = instance.size

    def _updateGridRect(self, instance, _):
        self.gridRect.pos = instance.pos
        self.gridRect.size = instance.size

    def _updateCoverRect(self, instance, _):
        self.coverRect.pos = instance.pos
        self.coverRect.size = instance.size

    def _updateCalibOverlay(self, instance, _):
        self.calibrationWidget.pos = instance.pos
        self.calibrationWidget.size = instance.size
Beispiel #14
0
    def build(self):
        root = FloatLayout()

        ## Screen Manager
        self.screen_manager = ScreenManager(transition=SlideTransition(),
                                            size_hint=[None, None],
                                            pos_hint={'left': 1})
        root.bind(size=self.update_size)
        root.add_widget(self.screen_manager)

        ## "Navbar" Buttons
        ## These are meant to work like the Android navbar would, and I have named them as such.
        # These two functions are used for a indicator for the button being pressed.
        def rend_circle(btn):
            with btn.canvas:
                Color(1, 1, 1, 0.25)
                size = (btn.size[0], btn.size[1] * 1.5)
                btn.hl = Ellipse(
                    pos=(btn.pos[0] + ((btn.size[0] / 2) - (size[0] / 2)),
                         btn.pos[1] + ((btn.size[1] / 2) - (size[1] / 2))),
                    size=size)
                Color(1, 1, 1,
                      1)  # Reset the color, otherwise the background goes dark

        def derend_circle(btn):
            btn.canvas.remove(btn.hl)

        self.win_btn = Button(text='',
                              size_hint=[None, None],
                              size=[192, 192],
                              height=192,
                              pos_hint={
                                  'right': 1,
                                  'center_y': 0.8
                              })
        self.win_btn.bind(on_press=rend_circle)
        self.win_btn.bind(on_release=derend_circle)
        self.win_btn.bind(on_release=self.pressed_win)

        self.home_btn = Button(text='',
                               size_hint=[None, None],
                               size=[192, 192],
                               pos_hint={
                                   'right': 1,
                                   'center_y': 0.5
                               })
        self.home_btn.bind(on_press=rend_circle)
        self.home_btn.bind(on_release=derend_circle)
        self.home_btn.bind(on_release=self.pressed_home)

        self.back_btn = Button(text='',
                               size_hint=[None, None],
                               size=[192, 192],
                               pos_hint={
                                   'right': 1,
                                   'center_y': 0.2
                               })
        self.back_btn.bind(on_press=rend_circle)
        self.back_btn.bind(on_release=derend_circle)
        self.back_btn.bind(on_release=self.pressed_back)

        root.add_widget(self.win_btn)
        root.add_widget(self.home_btn)
        root.add_widget(self.back_btn)

        # Render the background
        def update_rect(instance, value):
            instance.bg.pos = instance.pos
            instance.bg.size = instance.size

        self.screen_manager.bind(size=update_rect, pos=update_rect)
        with self.screen_manager.canvas.before:
            self.screen_manager.bg = Rectangle(source='background.png')

        Loader.loading_image = 'loading.png'
        ## FileChooser
        chooser_screen = Screen(name='chooser')
        chooser = FileChooserGalleryView(rootpath=PHOTOS_PATH)
        chooser.file_system = filesystem

        def select_folder(chooser, photostrip):
            photostrip.set_path(chooser.current_entry.path)
            self.goto_screen('photostrip', 'left')

        chooser.bind(
            on_select_folder=lambda args: select_folder(chooser, photostrip))
        chooser_screen.add_widget(chooser)

        ## Painter
        self.paint_screen = PaintScreen(name='painter')
        self.paint_screen.bind(
            on_leave=lambda src: self.paint_screen.painter.clear())

        ## ImageViewer
        viewer_screen = ViewerScreen(name='viewer')
        viewer_screen.bind(on_enter=lambda src: setattr(
            self.paint_screen.image, 'source', viewer_screen.image.source))

        ## Photo strip
        def foo(a):
            print type(a), a

        photostrip_screen = Screen(name='photostrip')
        photostrip = PhotoStrip()
        photostrip_screen.add_widget(photostrip)
        photostrip.bind(
            on_press=lambda src, fn: viewer_screen.set_image(fn),
            on_release=lambda src, fn: self.goto_screen('painter', 'left'),
        )

        # Set up the icons and functions for the navbar buttons
        chooser_screen.btns = [None, 'ic_action_refresh.png', None]
        chooser_screen.btn_functions = [None, chooser._trigger_update, None]

        photostrip_screen.btns = [None, None, 'ic_sysbar_back.png']
        photostrip_screen.btn_functions = [
            None, None, lambda: self.goto_screen('chooser', 'right')
        ]

        viewer_screen.btns = ['ic_action_edit.png', None, 'ic_sysbar_back.png']
        viewer_screen.btn_functions = [
            lambda: self.goto_screen('painter', 'left'),
            viewer_screen.drawing_toggle,
            lambda: self.goto_screen('photostrip', 'right')
        ]

        self.paint_screen.btns = [
            'ic_action_save.png', None, 'ic_action_discard.png'
        ]
        self.paint_screen.btn_functions = [
            self.save_painter, None,
            lambda: self.goto_screen('photostrip', 'right')
        ]

        # Finally, add the screens to the manager
        self.screen_manager.add_widget(chooser_screen)
        self.screen_manager.add_widget(photostrip_screen)
        self.screen_manager.add_widget(viewer_screen)
        self.screen_manager.add_widget(self.paint_screen)

        # Set the navbar buttons from the variables set above
        self.screen_manager.transition.bind(on_complete=self.update_buttons)
        self.update_buttons()

        return root
Beispiel #15
0
class GeniusPad(App):
    def build(self):

        self.dir_path = os.path.dirname(os.path.realpath(__file__))
        Window.clearcolor = (1, 1, 1, 1)
        self.parent = FloatLayout(size=(300, 300))
        self.painter = ClipBoard()

        clearbtn = Button(text='Clear',
                          size_hint=(.1, .1),
                          pos_hint={
                              'x': .0,
                              'y': .0
                          })

        self.savebtn = Button(text="Compute",
                              size_hint=(.1, .1),
                              pos_hint={
                                  'x': .9,
                                  'y': .0
                              })
        clearbtn.bind(on_release=self.clear_canvas)
        self.savebtn.bind(on_release=self.init_compute)

        self.parent.add_widget(self.painter)
        self.parent.add_widget(clearbtn)
        self.parent.add_widget(self.savebtn)
        self.parent.bind(size=self._update_rect, pos=self._update_rect)

        self.img_count = 0
        self.pipe = mp.Queue()
        self.cluster_boxes = None
        with self.parent.canvas.before:
            Color(1, 1, 1, 1)
            self.rect = Rectangle(size=self.parent.size, pos=self.parent.pos)
        return self.parent

    def init_compute(self, _):
        self.computation_start = time.time()
        # remove bounding boxes
        if self.cluster_boxes is not None:
            self.painter.canvas.remove(self.cluster_boxes)

        img_array = self.generate_image_data()

        self.task = mp.Process(target=EquationRecognizer,
                               args=(img_array, self.pipe))
        self.task.start()

        # fetch the result after one second
        Clock.schedule_once(self.fetch_compute_result, .1)

    def fetch_compute_result(self, dt):
        if self.task.is_alive():
            Clock.schedule_once(self.fetch_compute_result, .1)
        else:
            self.render_with_result()

    def render_with_result(self):
        try:
            result = self.pipe.get(timeout=1)
        except queue.Empty:
            pr_info("Something went wrong with the computation", mode="W")
            return
        pr_info("Computation Result:", result.info)

        self.cluster_boxes = InstructionGroup()
        self.cluster_boxes.add(Color(0, 0, 0, 1))
        for info in result.data:
            pr_info("Rectangle: ", info[0], info[1], info[2], info[3])
            self.cluster_boxes.add(
                Line(points=(info[3], self.painter.height - info[0], info[2],
                             self.painter.height - info[0], info[2],
                             self.painter.height - info[1], info[3],
                             self.painter.height - info[1], info[3],
                             self.painter.height - info[0])))

        self.painter.canvas.add(self.cluster_boxes)
        pr_info("Computation took {:.3f}s".format(time.time() -
                                                  self.computation_start))

    def _update_rect(self, instance, value):
        self.rect.pos = instance.pos
        self.rect.size = instance.size

    def clear_canvas(self, obj):
        self.painter.canvas.clear()

    def generate_image_data(self):

        fbo = self.painter.make_fbo()
        with self.parent.canvas:
            anmi = Animation(opacity=0, duration=3)
            x, y = Window.size
            label_size = x / 2, y / 2
            msg = Label(text="Computing...",
                        color=[0, 0, 0, 1],
                        size=label_size,
                        texture_size=label_size,
                        bold=True)
            anmi.start(msg)

        # each pixel is 8 bits, but the idea of color needs to be abstracted out
        image_array = np.frombuffer(fbo.pixels, dtype=np.uint32)
        has_drawing = image_array > 0

        # get rid of the unnecessary value, clone the only knowledge we need
        processed_array = np.zeros(shape=image_array.shape, dtype=np.uint8)
        processed_array[has_drawing] = 1

        # recover the shape, took me one hour to find this out
        processed_array.shape = (fbo.size[1], fbo.size[0])

        #np.save("./plus"+str(randint(0,99999)), processed_array)
        return processed_array
Beispiel #16
0
class Viewer(Screen):
	def __init__(self,**kwargs):
		super (Viewer,self).__init__(**kwargs)
		self.master=FloatLayout()
		Window.clearcolor=(0,1,0,5)
		self.addb=Button(text="ADD",pos=(WXY(2),HXY(450)),width=WXY(60),height=HXY(30),size_hint=(None,None),font_size=HXY(16))
		self.addb.bind(on_press=self.adder)
		self.master.add_widget(self.addb)
		self.layout = GridLayout(cols=1, spacing=HXY(4), size_hint_y=None)
		self.layout.bind(minimum_height=self.layout.setter('height'))
		self.connection=Connection()
		self.values=self.connection.getvalues("date,content","diarydata")
		self.lists=[]
		index=0
		for date,content in self.values:
			self.lists.append(Button(text=content[:int(WXY(20))]+"-----"+str(date), size_hint_y=None, height=30,font_size=18,halign="left", valign="middle"))
			self.lists[index].bind(size=self.lists[index].setter('text_size'))
			self.lists[index].bind(on_press=self.popuptriger)
			self.layout.add_widget(self.lists[index])
			index+=1
		self.connection.conn.close();
		self.root = ScrollView(size=(WXY(310),HXY(440)),pos=(WXY(5),HXY(0)),size_hint=(None,None))
		self.root.add_widget(self.layout)
		self.master.add_widget(self.root)
		self.master.bind(size=self.on_rotate)
		self.add_widget(self.master)

	def on_rotate(self,event,event1):
		global screenheight
		global screenwidth
		global choice
		screenheight=Window.height
		screenwidth=Window.width
		self.addb.pos=(WXY(2),HXY(450))
		self.addb.width=WXY(60)
		self.addb.height=HXY(30)
		self.addb.font_size=HXY(16)

		self.root.size=(WXY(310),HXY(440))
		self.root.pos=(WXY(5),HXY(0))
		self.layout.spacing=HXY(4)
		index=0
	def popuptriger(self,event):
		editButton = Button(text = "Edit")
		deleteButton = Button(text = "Delete")
		cancelButton = Button(text = "Cancel")
		self.identity=event.text
		layout = BoxLayout()
		self.userpriority=Popup(title="Do you wish to continue",content=layout,width=Window.width,height=HXY(100),size_hint=(None,None))
		layout.add_widget(deleteButton)
		layout.add_widget(editButton)
		layout.add_widget(cancelButton)

		editButton.bind(on_press=self.deletelists)
		deleteButton.bind(on_press=self.editviewer)
		cancelButton.bind(on_press=self.userpriority.dismiss)
		
		self.userpriority.open()
	def deletelists(self,event):
		pass
	def editviewer(self,event):
		pass
	def adder(self,event):
		self.master.remove_widget(self.addb)
		self.master.remove_widget(self.root)
		self.manager.current="Logger"
Beispiel #17
0
    def build(self):
        root = FloatLayout()

        ## Screen Manager
        self.screen_manager = ScreenManager(transition=SlideTransition(),size_hint=[None,None], pos_hint={'left': 1})
        root.bind(size=self.update_size)
        root.add_widget(self.screen_manager)

        ## "Navbar" Buttons
        ## These are meant to work like the Android navbar would, and I have named them as such.
        # These two functions are used for a indicator for the button being pressed.
        def rend_circle(btn):
            with btn.canvas:
                Color(1,1,1,0.25)
                size = (btn.size[0], btn.size[1]*1.5)
                btn.hl = Ellipse(pos=( btn.pos[0]+((btn.size[0]/2)-(size[0]/2)), btn.pos[1]+((btn.size[1]/2)-(size[1]/2)) ), size=size)
                Color(1,1,1,1) # Reset the color, otherwise the background goes dark
        def derend_circle(btn):
            btn.canvas.remove(btn.hl)
        self.win_btn = Button(text='', size_hint=[None,None],size=[192,192],height=192,pos_hint={'right': 1, 'center_y': 0.8})
        self.win_btn.bind(on_press=rend_circle)
        self.win_btn.bind(on_release=derend_circle)
        self.win_btn.bind(on_release=self.pressed_win)

        self.home_btn = Button(text='', size_hint=[None,None],size=[192,192],pos_hint={'right': 1, 'center_y': 0.5})
        self.home_btn.bind(on_press=rend_circle)
        self.home_btn.bind(on_release=derend_circle)
        self.home_btn.bind(on_release=self.pressed_home)

        self.back_btn = Button(text='', size_hint=[None,None],size=[192,192],pos_hint={'right': 1, 'center_y': 0.2})
        self.back_btn.bind(on_press=rend_circle)
        self.back_btn.bind(on_release=derend_circle)
        self.back_btn.bind(on_release=self.pressed_back)

        root.add_widget(self.win_btn)
        root.add_widget(self.home_btn)
        root.add_widget(self.back_btn)

        # Render the background
        def update_rect(instance, value):
            instance.bg.pos = instance.pos
            instance.bg.size = instance.size
        self.screen_manager.bind(size=update_rect,pos=update_rect)
        with self.screen_manager.canvas.before:
            self.screen_manager.bg = Rectangle(source='background.png')

        Loader.loading_image = 'loading.png'
        ## FileChooser
        chooser_screen = Screen(name='chooser')
        chooser = FileChooserGalleryView(rootpath=PHOTOS_PATH)
        chooser.file_system = filesystem
        def select_folder(chooser, photostrip):
            photostrip.set_path(chooser.current_entry.path)
            self.goto_screen('photostrip', 'left')
        chooser.bind(on_select_folder=lambda args:select_folder(chooser, photostrip))
        chooser_screen.add_widget(chooser)

        ## Painter
        self.paint_screen = PaintScreen(name='painter')
        self.paint_screen.bind(on_leave=lambda src: self.paint_screen.painter.clear())

        ## ImageViewer
        viewer_screen = ViewerScreen(name='viewer')
        viewer_screen.bind(on_enter=lambda src:setattr(self.paint_screen.image,'source',viewer_screen.image.source))

        ## Photo strip
        def foo(a):
            print type(a), a
        photostrip_screen = Screen(name='photostrip')
        photostrip = PhotoStrip()
        photostrip_screen.add_widget(photostrip)
        photostrip.bind(
                on_press=lambda src,fn:viewer_screen.set_image(fn),
                on_release=lambda src,fn: self.goto_screen('painter', 'left'),
        )

        # Set up the icons and functions for the navbar buttons
        chooser_screen.btns             = [None,                                       'ic_action_refresh.png',      None]
        chooser_screen.btn_functions    = [None,                                       chooser._trigger_update,      None]

        photostrip_screen.btns          = [None,                                       None,                         'ic_sysbar_back.png']
        photostrip_screen.btn_functions = [None,                                       None,                         lambda:self.goto_screen('chooser', 'right')]

        viewer_screen.btns              = ['ic_action_edit.png',                       None,                         'ic_sysbar_back.png']
        viewer_screen.btn_functions     = [lambda:self.goto_screen('painter', 'left'), viewer_screen.drawing_toggle, lambda:self.goto_screen('photostrip', 'right')]

        self.paint_screen.btns          = ['ic_action_save.png',                       None,                         'ic_action_discard.png']
        self.paint_screen.btn_functions = [self.save_painter,                          None,                         lambda:self.goto_screen('photostrip', 'right')]

        # Finally, add the screens to the manager
        self.screen_manager.add_widget(chooser_screen)
        self.screen_manager.add_widget(photostrip_screen)
        self.screen_manager.add_widget(viewer_screen)
        self.screen_manager.add_widget(self.paint_screen)

        # Set the navbar buttons from the variables set above
        self.screen_manager.transition.bind(on_complete=self.update_buttons)
        self.update_buttons()

        return root
Beispiel #18
0
class Notepad(Screen):
	def __init__(self,**kwargs):
		super (Notepad,self).__init__(**kwargs)
		self.master=FloatLayout()
		self.datesetter=TextInput(text=str(today.today()),pos=(WXY(5),HXY(440)),width=WXY(146),height=HXY(40),font_size=HXY(25),size_hint=(None,None))
		self.submit=Button(text="submit",pos=(WXY(174),HXY(440)),width=WXY(141),height=HXY(40),size_hint=(None,None),font_size=HXY(25))
		self.submit.bind(on_press=self.popuptriger)
		self.content=TextInput(text="share your thoughts on today",pos=(WXY(5),HXY(5)),width=WXY(310),height=HXY(430),font_size=(HXY(18)),size_hint=(None,None))
		self.master.add_widget(self.datesetter)
		self.master.add_widget(self.submit)
		self.master.add_widget(self.content)
		self.master.bind(size=self.on_rotate)
		Window.clearcolor=(0,1,0,5)
		self.add_widget(self.master)

	def on_rotate(self,event,event1):
		global screenheight
		global screenwidth
		screenheight=Window.height
		screenwidth=Window.width

		self.datesetter.pos=(WXY(5),HXY(440))
		self.datesetter.width=WXY(146)
		self.datesetter.height=HXY(40)
		self.datesetter.font_size=HXY(25)

		self.submit.pos=(WXY(174),HXY(440))		
		self.submit.width=WXY(141)
		self.submit.height=HXY(40)
		self.submit.font_size=HXY(25)
        
		self.content.pos=(WXY(5),HXY(5))		
		self.content.width=WXY(310)
		self.content.height=HXY(430)
		self.content.font_size=HXY(18)
	def popuptriger(self,event):
		closeButton = Button(text = "Close")
		cancelButton = Button(text = "cancel")
		saveButton = Button(text = "Save")

		layout = BoxLayout()
		self.userpriority=Popup(title="Do you wish to continue",content=layout,width=Window.width,height=HXY(100),size_hint=(None,None))
		layout.add_widget(cancelButton)
		layout.add_widget(saveButton)
		layout.add_widget(closeButton)

		saveButton.bind(on_press=self.saveswapper)
		closeButton.bind(on_press=self.nonsaveswapper)
		cancelButton.bind(on_press=self.userpriority.dismiss)
		
		self.userpriority.open()
	def saveswapper(self,event):
		res=0;
		for i in self.datesetter.text:
			if(i>='0' and i<'9'):	
				res=(res*10)+int(i)
		self.connection=Connection()
		values="({},'{}')".format(res,str(self.content.text))
		columnname="('{}','{}')".format("date","content")
		self.connection.insertintotable("diarydata",columnname,values)
		self.connection.conn.close()
		self.removelayout()
	def nonsaveswapper(self,event):
		self.userpriority.dismiss()
		self.set_previous_screen() 
	def removelayout(self):
		self.userpriority.dismiss()
		self.master.remove_widget(self.datesetter)
		self.master.remove_widget(self.content)
		self.master.remove_widget(self.submit)
Beispiel #19
0
class Application(App):
    def build(self):
        Window.clearcolor = (1, 1, 1, 0)
        #Window.size=(320,480)
        self.connection = Connection()
        self.img = Image(source='net.jpeg', size_hint=(None, None))
        self.img.allow_stretch = True
        self.img.opacity = 1
        self.password = TextInput(text="password",
                                  multiline=False,
                                  size_hint=(None, None))
        self.loginbutton = Button(text="Unlock", size_hint=(None, None))
        self.loginbutton.bind(on_press=self.login)
        self.registerbutton = Button(text="Register", size_hint=(None, None))
        self.registerbutton.bind(on_press=self.register)
        #creating layout based on conditions
        cols = self.connection.size("pwmanager")
        self.master = FloatLayout()
        if cols is not 1:
            self.master.add_widget(self.registerbutton)
        else:
            self.master.add_widget(self.loginbutton)
        self.master.add_widget(self.img)
        self.master.add_widget(self.password)
        self.master.bind(size=self.on_rotate)
        return self.master

    def login(self, event):
        passwordtext = self.connection.getvalues("*", "pwmanager")
        userentry = ""
        for i in passwordtext.fetchone():
            userentry = i
        if (userentry == self.password.text):
            self.master.remove_widget(self.loginbutton)
            self.master.remove_widget(self.img)
            self.master.remove_widget(self.password)
            self.connection.conn.close()
            self.viewer = Viewer(self.master)
        else:
            self.password.text = "Retry"
        global choice
        choice = 2

    def register(self, event):
        if (self.password.text is not ""):
            values = "('{}')".format(str(self.password.text))
            columnname = "('{}')".format("password")
            self.connection.insertintotable("pwmanager", columnname, values)
            self.master.remove_widget(self.registerbutton)
            self.master.add_widget(self.loginbutton)
            self.password.text = ""

    def on_rotate(self, event, event1):
        global screenheight
        global screenwidth
        global choice
        screenheight = Window.height
        screenwidth = Window.width
        if (choice == 1):
            self.img.pos = (WXY(60), HXY(263))
            self.img.width = WXY(207)
            self.img.height = HXY(164)

            self.password.pos = (WXY(53), HXY(180))
            self.password.width = WXY(208)
            self.password.height = HXY(37)
            self.password.font_size = HXY(18)

            self.loginbutton.pos = (WXY(82), HXY(117))
            self.loginbutton.width = WXY(146)
            self.loginbutton.height = HXY(40)
            self.loginbutton.font_size = HXY(18)

            self.registerbutton.pos = (WXY(82), HXY(117))
            self.registerbutton.width = WXY(146)
            self.registerbutton.height = HXY(40)
        elif (choice == 2):
            self.viewer.on_rotate()
        elif (choice == 3):
            self.viewer.notepad.on_rotate()
Beispiel #20
0
class EuclidApp(App):
    
    # BUILD
    def build(self):

        self.root = FloatLayout()
        self.root.bind(size = self._update_rect,
                       pos = self._update_rect)
        
        with self.root.canvas.before:
            Color(1, 1, 1, 1)
            self.rect = Rectangle(size = self.root.size,
                                  pos = self.root.pos)
        
        bg = Image(source = 'ec_logo.png')
        
        self.txt_in = CapitalInput(
            text = '',
            multiline = False,
            font_size = 30,
            size_hint=(0.95, 0.07),
            pos_hint = {'center_x': 0.5, 'center_y': 0.9}
            )
        
        grid = GridLayout(
            cols = 1,
            padding = 2,
            spacing = 5,
            size_hint = (1, None),
            )
        
        grid.bind(minimum_height = grid.setter('height'))

        # ADD A BUTTON TO INSTANCE
        def add_button(instance, value):
            btn = Button(
                text = value,
                size_hint = (1, None),
                font_size = 30,
                background_color = (0.4, 0.2, 0.6, 0.9),
                background_normal = ''
                )
            output = values[value]
            btn.bind(on_press = partial(self.buttonHandler, grid, output))
            instance.add_widget(btn)

        # DEFINE BEHAVIOUR FOR TEXT INPUT
        def on_text(instance, value):
            grid.clear_widgets()
            a_list = dict_lookup(values, str(value))
            if len(value) > 0:
                for i in range(len(a_list)):
                    add_button(grid, a_list[i])
                
        self.txt_in.bind(text = on_text)

        scroll = ScrollView(
            size_hint = (0.95, 0.8),
            pos_hint = {'center_x': .5, 'center_y': .4},
            do_scroll_x = False
            )

        scroll.add_widget(grid)

        self.root.add_widget(bg)
        self.root.add_widget(self.txt_in)
        self.root.add_widget(scroll)

        return self.root

    # UPDATE BACKGROUND COLOUR
    def _update_rect(self, instance, value):
        self.rect.pos = instance.pos
        self.rect.size = instance.size    
    
    # BUTTON HANDLER
    def buttonHandler(self, grid, value, button):
        grid.clear_widgets()
        btn = Button(
                text = value,
                size = (0, 500),
                size_hint = (1, None),
                font_size = 30,
                background_color = (0.6, 0.2, 0.4, 0.9),
                background_normal = '',
                background_down = ''
                )
        grid.add_widget(btn)
Beispiel #21
0
    def ErrorWindow(self):

        popupwindow = FloatLayout()

        # add events to the widgets
        def port_on_release(self):
            self.popup_label.text = f'Configure to port: {self.port.text} .' if (
                self.baudrate.text == 'Baudrate'
            ) else f'Configure to port: {self.port.text} and baudtare: {self.baudrate.text} .'

        def baudrate_on_release(self):
            self.popup_label.text = f'Configure to port: {self.port.text} .' if (
                self.baudrate.text == 'Baudrate'
            ) else f'Configure to port: {self.port.text} and baudtare: {self.baudrate.text} .'

        def try_on_press(self):
            print('try_on_press')

        def close_on_press(self):
            print('close_on_press')

        # define popup window widgets
        self.port = Spinner(text='Port',
                            values=AccordionApp.PORTS,
                            pos_hint={
                                'x': 0.0,
                                'center_y': 0.8
                            },
                            size_hint=[0.5, 0.1],
                            on_text=lambda spinner: port_on_release(self))
        self.baudrate = Spinner(
            text='Baudrate',
            values=AccordionApp.BAUDRATES,
            pos_hint={
                'x': 0.5,
                'center_y': 0.8
            },
            size_hint=[0.5, 0.1],
            on_release=lambda spinner: baudrate_on_release(self))
        self.popup_label = Label(
            text='please choose port and baudrate to configure correctly.',
            pos_hint={
                'center_x': 0.3,
                'center_y': 0.5
            },
            size_hint=[0.8, 0.1])
        self.popup_try = Button(text='try',
                                pos_hint={
                                    'x': 0,
                                    'y': 0
                                },
                                size_hint=[0.5, 0.1],
                                on_press=lambda button: try_on_press(self))
        self.popup_close = Button(text='close',
                                  pos_hint={
                                      'x': 0.5,
                                      'y': 0
                                  },
                                  size_hint=[0.5, 0.1],
                                  on_press=lambda button: close_on_press(self))
        # add modules to the popup window
        popupwindow.add_widget(self.popup_label)
        popupwindow.add_widget(self.popup_try)
        popupwindow.add_widget(self.popup_close)
        popupwindow.add_widget(self.port)
        popupwindow.add_widget(self.baudrate)

        # make popup window
        popup = Popup(content=popupwindow,
                      title='Configuration',
                      auto_dismiss=False)

        # bind the on_press event of the button to the dismiss function
        popupwindow.bind(on_press=popup.dismiss)
        popup.open()
Beispiel #22
0
class song_page(FloatLayout):
    def __init__(self, music_app_self, **kwargs):
        super(song_page, self).__init__(**kwargs)
        global other_layout, len_btn, len_btn2, song_page_self
        global curr_song, pre_song, pre_sound, song_counter, bt2, bt1, bt3
        global len_slid, sh, val_pre
        ########################################################################
        song_page_self = self
        #        self.song_page_box  = BoxLayout(orientation = 'vertical')
        #        tool_box.size_hint = (self.size_hint[0]*0.2,self.size_hint[1]*0.2)
        #        self.song_page_box.pos = (0,540)
        self.tb = my_MDToolbar(title='song name',
                               anchor_title='center',
                               background_palette='Primary')
        self.tb.md_bg_color = [1, 1, 1, 0.3]
        self.tb.pos_hint = {'x': 0, 'y': 0.9}
        self.tb.left_action_items = [[
            'chevron-down', lambda x: self.gonext(music_app_self)
        ]]
        #        self.song_page_box.add_widget(self.tb)
        self.add_widget(self.tb)

        self.song_page_float = FloatLayout(size=(100, 100))
        ############################################################
        with self.song_page_float.canvas.after:
            self.song_page_float.rect = RoundedRectangle(segments=15,
                                                         radius=[50])
            self.song_page_float.rect.source = 'images/image_2.jpg'

        def update_rect(instance, value):
            instance.rect.size = [
                instance.size[0] * 0.8, instance.size[0] * 0.6
            ]
            instance.rect.pos = [
                instance.pos[0] + instance.size[0] * 0.1,
                instance.pos[1] + instance.size[1] * 0.4
            ]

        self.song_page_float.bind(pos=update_rect, size=update_rect)
        ###########################################################
        #        self.im1 = Image(source='images/image_2.jpg', color=(1,1,1,.5),
        #                    size_hint=(self.size_hint[0]*0.3,self.size_hint[1]*0.3))
        #
        #        self.im1.pos_hint={'x':.35, 'y':.4}
        #
        #        self.song_page_float.add_widget(self.im1)
        #
        self.add_widget(self.song_page_float)
        #########################################################
        self.grid_2 = GridLayout(cols=3,
                                 size_hint=(1, 0.2),
                                 row_force_default=True,
                                 row_default_height=40,
                                 opacity=1)
        #        print(self.grid_2.size_hint)
        self.b1 = Label(text='00:00',
                        color=(0, 0, 1, 0.5),
                        size_hint_x=None,
                        width=self.width)
        self.grid_2.add_widget(self.b1)

        self.slid = Slider(min=-1,
                           max=100,
                           value=0,
                           cursor_width='8dp',
                           cursor_height='30dp',
                           value_track=True,
                           background_width='8dp',
                           value_track_width='1.5dp',
                           value_track_color=[0, 0, 1, 1],
                           step=1)
        self.slid.pos = (1, 100)
        self.grid_2.add_widget(self.slid)
        self.b2 = Label(text='min' + ':' + 'sec',
                        size_hint_x=None,
                        width=self.width,
                        color=(0, 0, 1, 0.5))
        self.grid_2.add_widget(self.b2)

        len_btn = self.b2
        len_btn2 = self.b1
        len_slid = self.slid

        self.slid.bind(value=slid_bind)
        self.add_widget(self.grid_2)

        fl = FloatLayout(size_hint=(1, 0.05), opacity=1)

        bt1 = ImgButton_pre(prev_normal_img, prev_press_img, id='pre')
        #        bt1.bind(on_press = partial(self.previous_song))
        fl.add_widget(bt1)

        bt2 = ImgToggleButton_play(play_img, pause_img, id='pp')
        #        bt2.bind(on_press = partial(self.play_pause))
        fl.add_widget(bt2)

        bt3 = ImgButton_next(next_normal_img, next_press_img, id='next')
        #        bt3.bind(on_press = partial(self.next_song))
        fl.add_widget(bt3)

        self.add_widget(fl)
#        self.add_widget(self.song_page_box)

    def gonext(self, music_app_self):
        music_app_self.sm.transition.direction = 'down'
        music_app_self.sm.current = 'mainscreen'

    def update_info(btn_self, index, main_self, music_app_self, *args):
        global song_page_self, co, pre_sound, bt2, ite, pre_song, bt1, bt3, sh, len_btn2, len_slid
        global cpb, ite, my_fb
        #        def animate(self,dt, song_len):
        #            print(self)
        #            print(dt)
        #            print(song_len)
        #            bar = self.children[0]
        #            if bar.value < bar.max:
        #                bar.value_normalized += 1/(self.children[0]._max_progress)

        curr_song = index
        file = File(songlist[index][0])
        song_length = float(file.info.pprint().split(',')[-1:][0][:-8])
        time = song_length / 60
        minute = int(time)
        min_str = "{0:0=2d}".format(minute)
        second = int(round((time - minute) * 60, 2))
        sec_str = "{0:0=2d}".format(second)
        try:
            singer = file['TPE1'].text[0]
        except:
            try:
                singer = file['TALB'].text[0]
            except:
                singer = ''
        try:
            song_name = file['TIT2'].text[0]
        except:
            song_name = (file.filename.split('/'))[-1:][0]

        song_page_self.tb.title = '[b]' + song_name + '[/b]'
        song_page_self.tb.ids['lbl2'].text = singer
        song_page_self.b2.text = min_str + ':' + sec_str
        song_page_self.slid.max = int(song_length)
        #        song_page_self.im1.source = cover_album[index]
        song_page_self.song_page_float.rect.source = cover_album[index]
        #        ########################################################
        if (co == 0):
            my_fb = FloatLayout()
            my_fb.size_hint = [1, 0.09]
            #            ############################################3
            ite = ItemMenuForFitness()
            ite.bt_img(my_fb)
            ite.bind(on_release=partial(song_page_self.gonext_playpage,
                                        music_app_self))
            ############################################3
            cpb = CircularProgressBar(ite)
            cpb.size_hint = ite.size_hint
            my_fb.add_widget(cpb)
            #############################################
            co += 1
            main_self.add_widget(my_fb)
            ##################################################
            bt1.bind(on_press=partial(song_page_self.previous_song, btn_self,
                                      main_self, music_app_self))
            bt2.bind(on_press=partial(song_page_self.play_pause, btn_self))
            bt3.bind(on_press=partial(song_page_self.next_song, btn_self,
                                      main_self, music_app_self))
            ################################################
        ite.rect4.source = cover_album[index]
        cpb._max_progress = int(song_length)
        #        try:
        #            csh.cancel()
        #        except:
        #            pass
        #        csh = Clock.schedule_interval(partial(animate, my_fb, (song_length)), 1)
        #        ########################################################
        #####################################################################
        ## play song
        try:
            bt2.state = 'down'
            ImgToggleButton_play.on_state(bt2, 'fwfwf', 'normal')
            pre_sound.stop()
            pre_sound.unload()
            pre_song = -1
        except:
            pre_song = -1
        if (curr_song != pre_song):
            if (btn_self.state == 'down'):
                bt2.state = 'down'
                ImgToggleButton_play.on_state(bt2, 'fwfwf', 'down')
                sound = SoundLoader.load(songlist[index][0])
                if (sound != None):
                    val_pre = -1
                    sh = slid_func(sound, len_slid, len_btn2, my_fb,
                                   song_page_self)
                    sound.play()
                    pre_sound = sound
                    pre_song = index
                    song_counter = index
                    songlist[pre_song][1].state = 'down'

######################################################################

    def gonext_playpage(self, music_app_self, bke):
        music_app_self.sm.transition.direction = 'up'
        music_app_self.sm.current = "playpage"

    def play_pause(self, whjfvwh, btn_self):
        global curr_song, pre_song, pre_sound, song_counter, len_slid, len_btn2, sh, song_position
        global my_fb
        if (btn_self.state == 'normal'):
            try:
                song_position = pre_sound.get_pos()
                sh.cancel()
                pre_sound.stop()
                pre_sound.unload()
                songlist[pre_song][1].state = 'normal'
                print(songlist[pre_song][0] + '   :    stoped')
            except:
                pass
        else:
            index = pre_song
            sound = SoundLoader.load(songlist[index][0])
            bt2.state = 'down'
            ImgToggleButton_play.on_state(bt2, 'fwfwf', 'down')
            if (sound != None):
                val_pre = -1
                sound.play()
                sound.seek(song_position)
                sh = slid_func(sound, len_slid, len_btn2, my_fb,
                               song_page_self)
                pre_song = index
                song_counter = index
                pre_sound = sound
                songlist[pre_song][1].state = 'down'
                print(songlist[pre_song][0] + '   :    playing')

    def previous_song(self, amdvh, btn_self, main_self, music_app_self):
        global curr_song, pre_song, pre_sound, song_counter, up_btn_self, up_main_self, up_music_app_self
        pre_sound.stop()
        pre_sound.unload()
        songlist[song_counter][1].state = 'normal'
        song_counter = song_counter - 1
        if (song_counter < 0):
            song_counter = 0
        song_page.update_info(music_app_self, song_counter, main_self,
                              btn_self)

    def next_song(self, ahvdhj, btn_self, main_self, music_app_self):
        global curr_song, pre_song, pre_sound, song_counter, up_btn_self, up_main_self, up_music_app_self
        pre_sound.stop()
        pre_sound.unload()
        songlist[song_counter][1].state = 'normal'
        song_counter = song_counter + 1
        if (song_counter == len(songlist)):
            song_counter = len(songlist) - 1
        song_page.update_info(music_app_self, song_counter, main_self,
                              btn_self)