在输入保存后重置kivy文本输入+任何其他注释

2024-09-30 20:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个程序,日志与一些不同的东西,随着工作的球拍串。我在信息保存后重置kivy文本输入时遇到问题。这段代码可能很难读懂,因为它是我在过去几天里搞乱事情的一个小拼凑。如果你能帮助我了解如何重置文本输入和任何其他改进将不胜感激-克里斯-新手

            import kivy
            import gspread
            from kivy.app import App
            from kivy.uix.label import Label
            from kivy.uix.textinput import TextInput
            from kivy.core.window import Window
            from kivy.uix.gridlayout import GridLayout
            from kivy.core.window import Window
            from kivy.uix.button import Button
            from kivy.uix.screenmanager import ScreenManager , Screen
            from oauth2client.service_account import ServiceAccountCredentials

            list = []

            Client = ''
            Racquet = ''
            String = ''
            Tension = ''

            scope = ['https://www.googleapis.com/auth/drive']
            creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
            client = gspread.authorize(creds)

            sheet = client.open("Stringing Log MAIN").sheet1

            def clients(instance, value):
                print(value)
                global Client
                Client = str(value[8:])
                global list
                return

            def racquets(instance, value):
                print(value)
                global Racquet
                Racquet = str(value[9:])
                global list
                return

            def strings(instance, value):
                print(value)
                global String
                String = str(value[8:])
                global list
                return

            def tensions(instance, value):
                print(value)
                global Tension
                Tension = str(value[9:])
                global list
                return

            clienttxt = open("Client", "w")
            racquettxt = open("Racquet", "w")
            stringtxt = open("String", "w")
            tensiontxt = open("Tension", "w")

            def Test(x):
                global sheet
                list.insert(0, Client)
                list.insert(1, Racquet)
                list.insert(2, String)
                list.insert(3, Tension)
                sheet.insert_row(list, 1)
                list.clear()
                return

            class MyGrid(GridLayout):
                def __init__(self, **kwargs):

                    super(MyGrid, self).__init__(**kwargs)
                    self.cols = 1


                    client = TextInput(text = "Client: ", write_tab = False, multiline=False)
                    client.bind(text=clients)
                    self.add_widget(client)

                    racquet = TextInput(text= "Racquet: ", write_tab = False, multiline=False)
                    racquet.bind(text=racquets)
                    self.add_widget(racquet)

                    string = TextInput(text= "String: ", write_tab = False, multiline=False)
                    string.bind(text=strings)
                    self.add_widget(string)

                    tension = TextInput(text= "Tension: ", write_tab = False, multiline=False)
                    tension.bind(text=tensions)
                    self.add_widget(tension)

                    button1 = Button(text="Submit")
                    self.add_widget(button1)
                    button1.bind(on_press=Test)



            class StringingApp(App):
                def build(self):
                    return MyGrid()


            if __name__ == "__main__":
                StringingApp().run()

Tags: textfromimportselfclientfalsestringvalue
1条回答
网友
1楼 · 发布于 2024-09-30 20:30:31

您可以在__init__()方法中保存对每个TextInput的引用,例如:

self.client = TextInput(text = "Client: ", write_tab = False, multiline=False)

然后,将Test方法移到MyGrid类中:

        def Test(self, x):
            global sheet
            list.insert(0, Client)
            list.insert(1, Racquet)
            list.insert(2, String)
            list.insert(3, Tension)
            sheet.insert_row(list, 1)
            list.clear()

            # clear the TextInput widgets here
            self.client.text = ''
            return

你的Button绑定变成:

button1.bind(on_press=self.Test)

下面是我建议的修改之后的整个MyGrid类:

class MyGrid(GridLayout):
    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)
        self.cols = 1

        # save a reference to the client TextInput
        self.client = TextInput(text="Client: ", write_tab=False, multiline=False)
        self.client.bind(text=clients)
        self.add_widget(self.client)

        racquet = TextInput(text="Racquet: ", write_tab=False, multiline=False)
        racquet.bind(text=racquets)
        self.add_widget(racquet)

        string = TextInput(text="String: ", write_tab=False, multiline=False)
        string.bind(text=strings)
        self.add_widget(string)

        tension = TextInput(text="Tension: ", write_tab=False, multiline=False)
        tension.bind(text=tensions)
        self.add_widget(tension)

        button1 = Button(text="Submit")
        self.add_widget(button1)
        button1.bind(on_press=self.Test)   # bind to Test() method below

    def Test(self, x):
        global sheet
        list.insert(0, Client)
        list.insert(1, Racquet)
        list.insert(2, String)
        list.insert(3, Tension)
        sheet.insert_row(list, 1)
        list.clear()

        # clear the TextInput widgets here
        self.client.text = ''   # or set it to anything you want, handle the other TextInputs similarly
        return

相关问题 更多 >