如何使用按钮输出文本和删除文本

时间:2019-10-31 00:25:34

标签: python kivy

我正在尝试通过按钮输出来输出文本,并在每次按下时将其添加到文本框中,以及在按下删除按钮时删除文本-在普通的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()

它当前发送一个错误,可能是因为ids。不完全确定ID如何在不使用kv语言的情况下工作。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

id仅在.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()