Я работаю над тем же вопросом из моего предыдущего поста. Теперь я добавил менеджер экрана, и я могу переключаться на разные страницы.
почему моя программа kivy не вызывает функцию из другого класса?
Я все еще не совсем понимаю, что такое OOP с графическим интерфейсом, однако я пробовал следующее, но ни один из них сработало.
Я попытался добавить экземпляр Screen 1 () в основное приложение (), но ничего не получилось. Затем я попытался добавить метод подрядчика init в Screen_1 (), и он говорит, что у меня нет метода сборки. И несколько других идей, которые не сработали вообще.
Затем я понял, что нет никакой связи между Screen_Manager () и Screen_1 (), потому что все мои методы находятся в Screen_1 (), но метод сборки возвращает Screen_Manager (). В моем файле kv есть такой код:
<Screen_Manager>:
Screen_1:
Screen_2:
Разве не здесь программа "связывает" класс Screen_Manager () с другими классами?
, если кто-то может помочь Я понимаю, что я не понимаю, и помогите мне исправить мою проблему, это поможет мне узнать о киви. Я понимаю, <> это как применять к правилам, которые имеют 2 виджета экран 1 и экран 2, а также имеют свои собственные правила.
вот мой main.py
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
from kivy.uix.screenmanager import ScreenManager, Screen
class Screen_Manager(ScreenManager):
pass
class Screen_1(Screen):
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)
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, instance):
super().__init__()
self.a = instance
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()
return True
class Screen_2(Screen):
pass
class MainApp(App):
def build(self):
self.title = "Number Control App"
self.sm = Screen_Manager()
key = Keyboard(self.sm)
return self.sm
if __name__=="__main__":
MainApp().run()
мой файл kv
<Screen_Manager>:
Screen_1:
Screen_2:
<Screen_1>:
name: "first"
main_display: display_1
text_input: text_input_1
#------inherenting from BoxLayout
BoxLayout:
orientation: "vertical"
#------begining of conent--
BoxLayout:
size_hint_y: 1
#-nexted content------
Label:
id: display_1
text: "0"
font_size: "150sp"
background_color: 0.1, 0.5, 0.6,
#--------
BoxLayout:
size_hint_y: .35
orientation: "horizontal"
#-nexted content------
Button:
text: "-"
font_size : "60sp"
on_press: root.minus_1()
#-nexted content------
Button:
text: "+"
font_size : "35sp"
background_color: (0, 1, 0, 1)
on_press: root.plus_1()
#--------
BoxLayout:
size_hint_y: .15
orientation: "horizontal"
#-nexted content-------
Button:
text: "Config"
size_hint_x: .25
on_release:
root.manager.current = "second"
root.manager.transition.direction = "left"
#-nexted content-------
TextInput:
id: text_input_1
size_hint_x: 1
hint_text: "Enter your initial # here"
multiline: False
#-nexted content-------
Button:
text: "Up"
size_hint_x: .25
on_press: root.up()
<Screen_2>:
name: "second"
Button:
text: "Go Back"
on_press:
app.root.current = "first"
root.manager.transition.direction = "right"enter code here
еще раз спасибо, что нашли время помочь.