【问题标题】:Resetting kivy text inputs once the inputs have been saved + any other comments保存输入后重置 kivy 文本输入+任何其他评论
【发布时间】:2019-08-05 06:44:44
【问题描述】:

我目前正在制作一个程序,该程序会记录带有与工作相关的一些不同事物的串起球拍。保存信息后,我无法重置 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()

【问题讨论】:

    标签: python input kivy reset


    【解决方案1】:

    您可以在__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
    

    【讨论】:

    • 我尝试了您提到的编辑,但是当按下提交时,TextInputs 没有受到影响。
    • 我的顺序是 MyGrid 类,def 测试,def init,在 init 内它变得超级,self.client,球拍,字符串,张力,然后是添加小部件的所有部分。
    • 如果我要添加新功能,是否值得在当前应用中添加新页面或创建新的 python 程序?
    • 这是一个基于意见的问题。您必须决定您希望 App(s) 的工作方式。
    • 所以我对页面管理器和所有这些工作的方式感到非常困惑。有没有简单的方法可以按照我的设置方式为应用的不同方面创建三个页面?
    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2016-06-07
    相关资源
    最近更新 更多