почему моя программа kivy не вызывает функцию из другого класса? - PullRequest
0 голосов
/ 10 апреля 2020

Я думаю, что это больше вопрос python, чем вопрос киви.

class Клавиатура разделяет метод из класса GUI. Я создал экземпляр GUI под названием "self.a" для соединения двух классов в классе Keyboard. Кроме того, я создал экземпляр класса клавиатуры «self.key в классе MainApp.

, когда я использую этот метод», print («нажата кнопка возврата»), кнопка «return» смогла сделать оператор print. Я понимаю, почему это работает. Когда я использую «self.a.up ()» в методе, кнопка возврата не вызывает метод up () из класса GUI. Это, вероятно, небольшая деталь или Понятие, которое я пропускаю. Нет ошибки в остальной части программы. Пожалуйста, помогите и спасибо заранее.

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.lang.builder import Builder
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.modules import keybinding
from kivy.core.window import Window


class GUI(BoxLayout):
    main_display = ObjectProperty()
    text_input = ObjectProperty()


    def plus_1(self):
        self.value = int(self.main_display.text)
        self.main_display.text = str(self.value + 1)
        print (self.main_display.text)

    def minus_1(self):
        self.value = int(self.main_display.text)
        self.main_display.text = str(self.value - 1)


    def up(self):
        self.main_display.text = self.text_input.text
        self.text_input.text = ''

class Keyboard(Widget):

    def __init__(self,):
        super().__init__()
        self.a = GUI()

        self.keyboard = Window.request_keyboard(None, self)
        self.keyboard.bind(on_key_down=self.on_keyboard_down)

    def on_keyboard_down(self, keyboard, keycode, text, modifiers):
        if keycode[1] == 'enter':
            self.a.up()
#           print ("Return button is pressed")
        return True

class MainApp(App):
    def build(self):
        key = Keyboard()
        return GUI()



if __name__=="__main__":
    app = MainApp()
    app.run()

1 Ответ

1 голос
/ 10 апреля 2020

Я думаю, что это работает нормально, но в другом объекте, который вы не можете видеть. Проблема в том, что вы показываете один объект класса GUI на экране. А для класса Keyboard вы создали еще один объект, который вы не видите. Поэтому решение состоит в том, чтобы использовать один объект класса GUI и работать с ним в классах MainApp и Keyboard. Что-то вроде:

class MainApp(App):
    def build(self):
        # here we create an object...
        self.gui = GUI()
        # ...send it to Keyboard class
        key = Keyboard(self.gui)
        # and return it
        return self.gui

class Keyboard(Widget):

    def __init__(self, gui):
        super().__init__()
        # and here we receive that object instead of creating new one
        self.a = gui
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...