Search code examples
pythonkivy

Why does not the button "submit" disabled after the "random_answer" function?


Config.set('graphics', 'resizable', '0')
class MyApp(App):
    list_of_tasks=['Задание №1: составьте структурную формулу бутена-1',
                'Задание №2: составьте структурную формулу 3-этилгексена-1',
                'Задание №3: составьте структурную формулу 2,3-диметилгексена-1',
                'Задание №4: составьте структурную формулу метилпропена-1',
                'Задание №5: составьте структурную формулу 5-метилгексена-2',
                'Задание №6: составьте структурную формулу 2-метилгексена-3',
                'Задание №7: составьте структурную формулу 2,3-диметилбутена-2',
                'Задание №8: составьте структурную формулу пентена-1',
                'Задание №9: составьте структурную формулу 2-метилбутена-2',
                'Задание №10: составьте структурную формулу 3-диметилбутен-1']
    answers=['Верный ответ!','Неверный ответ!']
    label=Label(text='Задание №1: составьте структурную формулу бутена ',pos=(0,200))
    answer_label = Label(text=random.choice(answers))
    i=0
    iii=0
    ii=str(iii)
    label_0_10=Label(text='0/10',pos=(300,250))
    submit=Button(text='Принять ответ',pos=(200,100))#,size_hint=(.5,.15),on_press=self.random_answer)
    completed_tasks=[]
    def new_task(self, *args):
        if self.i==9:
            self.label.text=self.list_of_tasks[0]
            self.i=0
        else:
            self.label.text=self.list_of_tasks[self.i+1]
            self.i+=1
        self.ii = str(self.iii) 
        self.label_0_10.text = self.ii + '/10'  
        self.root.clear_widgets()
        self.root.add_widget(self.label)
        self.root.add_widget(self.label_0_10)
        self.root.add_widget(Button(text='Принять ответ', pos=(200, 100), size_hint=(.5, .15), on_press=self.random_answer))
        anchor_for_button = AnchorLayout(anchor_x='right', anchor_y='bottom')
        anchor_for_button.add_widget(Button(text='Перейти к следующей задаче>', size_hint=[.35, .05], on_press=self.new_task))
        self.root.add_widget(anchor_for_button)
        anchor_for_button2 = AnchorLayout(anchor_x='left', anchor_y='bottom')
        anchor_for_button2.add_widget(Button(text='<Перейти к предыдущей задаче', size_hint=[.35, .05], on_press=self.not_new_task))
        self.root.add_widget(anchor_for_button2)
    def not_new_task(self, *args):
        if self.i==0:
            self.label.text=self.list_of_tasks[9]
            self.i=9
        else:
            self.label.text=self.list_of_tasks[self.i-1]
            self.i-=1
        self.ii = str(self.iii)  
        self.label_0_10.text = self.ii + '/10'  
        self.root.clear_widgets()
        self.root.add_widget(self.label)
        self.root.add_widget(self.label_0_10)
        self.root.add_widget(Button(text='Принять ответ', pos=(200, 100), size_hint=(.5, .15), on_press=self.random_answer))
        anchor_for_button = AnchorLayout(anchor_x='right', anchor_y='bottom')
        anchor_for_button.add_widget(Button(text='Перейти к следующей задаче>', size_hint=[.35, .05], on_press=self.new_task))
        self.root.add_widget(anchor_for_button)
        anchor_for_button2 = AnchorLayout(anchor_x='left', anchor_y='bottom')
        anchor_for_button2.add_widget(Button(text='<Перейти к предыдущей задаче', size_hint=[.35, .05], on_press=self.not_new_task))
        self.root.add_widget(anchor_for_button2)

    def random_answer(self,*args):
        random_choice=random.choice(self.answers)
        self.answer_label = Label(text=random_choice)
        if self.list_of_tasks[self.i] in self.completed_tasks:
            self.submit.disabled=True
        else:
            print(self.list_of_tasks[self.i])
            print(self.completed_tasks)
            self.submit.disabled=False
            if random_choice=='Верный ответ!':
                self.iii+=1
                self.completed_tasks.append(self.list_of_tasks[self.i])
            else:
                self.completed_tasks.append(self.list_of_tasks[self.i])
        self.root.add_widget(self.answer_label)



    def build(self):
        fl=FloatLayout(size=(300,300))
        anchor_for_button=AnchorLayout(anchor_x='right', anchor_y='bottom')
        anchor_for_button2=AnchorLayout(anchor_x='left', anchor_y='bottom')

        label=Label(text='Задание №1: составьте структурную формулу бутена ',pos=(0,200))
        label_0_10=Label(text=self.ii+'/10',pos=(300,250))
        submit=Button(text='Принять ответ',pos=(200,100),size_hint=(.5,.15),on_press=self.random_answer)
        fl.add_widget(self.label)
        fl.add_widget(submit)
        anchor_for_button.add_widget(Button(text='Перейти к следующей задаче>',size_hint=[.35,.05],on_press=self.new_task))
        anchor_for_button2.add_widget(Button(text='<Перейти к предыдущей задаче',size_hint=[.35,.05],on_press=self.not_new_task))
        fl.add_widget(label_0_10)
        fl.add_widget(anchor_for_button)
        fl.add_widget(anchor_for_button2)
        return fl
if __name__=="__main__":
    MyApp().run()

here is the code(python with kivy) I am a new one in kivy and don't know everything about it. I need to block submit button because I had overlay of inscriptions. All of imports in code. I don't have any errors in a console.

Again, I don't have a good knowledge about kivy and I just tried to do my best.


Solution

  • You are creating two submit buttons. I believe the one you want is the one that you create in the build() method. So, in your build() method, replace the lines that reference submit to use self.submit instead:

        self.submit=Button(text='Принять ответ',pos=(200,100),size_hint=(.5,.15),on_press=self.random_answer)
        fl.add_widget(self.submit)
    

    And the earlier line that creates a submit button can be eliminated.