kivy python buttonbehavior on_press отключить - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь создать приложение, используя kivy. Я добавил кнопку закрытия, а затем добавил on_release. Однако нажатие кнопки не работает.

python код:

import kivy
kivy.require('1.11.0')
from kivy.lang import Builder
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.behaviors import ButtonBehavior
from kivy.core.window import Window


Window.size = (350 * 1.5 , 600 * 1.5)
with open("./template.kv", encoding='utf8') as f:
    Builder.load_string(f.read())

class CloseButton(ButtonBehavior, Image):
    def __init__(self, **kwargs):
        super(CloseButton, self).__init__(**kwargs)
        self.source = './close_btn@2x.png'
    always_release = True

    def on_press(self):
        App.get_running_app().stop()

class Background(Screen):
    def __init__(self, **kwargs):
        super(Background, self).__init__(**kwargs)

class TemplateApp(App):
    def build(self):
        # title bar remove
        # Window.borderless = True
        sm = ScreenManager()
        sm.add_widget(Background(name='back'))
        return sm

if __name__ == '__main__':
    TemplateApp().run()

код кивы:

<Background>:
    canvas:

        Rectangle:
            pos: self.pos
            size: self.size
            source: "background.png"
    Label:
        font_size: 12 * 1.5
        text: 'Template'
        font_name: './NotoSans-hinted/NotoSans-Regular.ttf'
        size_hint: (1.0, 1.0)
        halign: "left"
        valign: "top"
        color: 0.43568, 0.43568, 0.43568, 1
        text_size: root.width - (40 * 1.5), 583 * 1.5

    BoxLayout:
        size_hint: 1.9, 1.938
        CloseButton:
            id: close_btn

1 Ответ

1 голос
/ 03 февраля 2020

Вместо

    def on_press(self):
        App.get_running_app().stop()

попробуйте это

self.on_press = App.get_running_app().stop()

Хорошо, давайте попробуем это:

from kivy.clock import Clock
...
class CloseButton(ButtonBehavior, Image):
    def __init__(self, **kwargs):
        super(CloseButton, self).__init__(**kwargs)
        self.source = './close_btn@2x.png'
    # no parentheses after method's name!
    self.on_press = self.closeapp

    def closeapp(self):
        Clock.schedule_once(App.get_running_app().stop())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...