Как вывести текст и удалить текст с помощью кнопок - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь выводить текст при нажатии кнопок и добавлять его в текстовое поле при каждом нажатии, а также удалять текст при нажатии кнопки - в обычном Python.

Я былпытаюсь использовать kivy.uix.textinput, но я не уверен, как вывести значение из кнопок, а также удалить его.

Это то, что я сделал до сих пор.

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput

class CodeScreen(Screen):
    def __init__(self):
        super(CodeScreen, self).__init__(name='code_screen')

        main_grid_lay = GridLayout(cols=2,cols_minimum={0:640, 1:175})
        self.add_widget(main_grid_lay)

        #Code ouput display
        display_code = TextInput(text='Code!', readonly = True, id=output)
        main_grid_lay.add_widget(display_code)                                    

        #Options Buttons
        box_lay = BoxLayout(orientation='vertical')                                 
        main_grid_lay.add_widget(box_lay)

        delete_button = Button(                                                     
            text='Delete',
            size_hint_x= None,
            width=160,
            id=''           #unsure on how to delete
        )
        box_lay.add_widget(delete_button)
        base_left = Button(
            text='Base Left',
            #on_release= b_left(),
            #id='left',
        )
        base_right = Button(
            text='Base Right',
            on_release=self.degree_popup,
            #on_release= b_right(),
        )

        #b_left = self.ids.output.text='left'
        #b_left = self.ids.output.text='right'
        box_lay.add_widget(base_left)
        box_lay.add_widget(base_right)

# The app class
class MyMain(App):
    def build(self):
        return CodeScreen()

# Runs the App
if __name__ == '__main__':
    MyMain().run()

В настоящее время отправляет ошибку и, вероятно, из-за идентификаторов. Не до конца уверен, как идентификаторы работают без использования языка kv. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 31 октября 2019

Идентификатор имеет смысл только в .kv, в python они бесполезны. В этом случае решение состоит в том, чтобы получить доступ к объектам в методах, связанных с on_release, но для этого они должны быть атрибутами класса.

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput


class CodeScreen(Screen):
    def __init__(self):
        super(CodeScreen, self).__init__(name="code_screen")

        self.display_code = TextInput(text="Code!", readonly=True)

        self.delete_button = Button(
            text="Delete", size_hint_x=None, width=160, on_release=self.delete_clicked
        )

        self.base_left = Button(text="Base Left", on_release=self.left_clicked)
        self.base_right = Button(text="Base Right", on_release=self.right_clicked)

        main_grid_lay = GridLayout(cols=2, cols_minimum={0: 640, 1: 175})
        main_grid_lay.add_widget(self.display_code)
        self.add_widget(main_grid_lay)
        box_lay = BoxLayout(orientation="vertical")
        box_lay.add_widget(self.delete_button)
        main_grid_lay.add_widget(box_lay)

        box_lay.add_widget(self.base_left)
        box_lay.add_widget(self.base_right)

    def delete_clicked(self, instance):
        self.display_code.text = ""

    def left_clicked(self, instance):
        self.display_code.text += "left"

    def right_clicked(self, instance):
        self.display_code.text += "right"


# The app class
class MyMain(App):
    def build(self):
        return CodeScreen()


# Runs the App
if __name__ == "__main__":
    MyMain().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...