Kivy - 为什么这种不相关(看似)的按钮状态变化会影响清除列表的能力?

有谁知道这里发生了什么?目标:有很多按钮。单击两个,它们都单独将一个项目附加到一个空列表中。当列表的 len 为 2 时(单击 2 个不同的按钮后)如果两个项目不相同,则清除/清空列表。如果两项相同,则清除/清空列表,并禁用这两个按钮。这里的想法是记忆游戏。这些按钮一开始是空白的,您单击它,它们会显示文本,而该文本就是附加到列表中的项目。


问题:如果附加的两个项目匹配,它会按预期禁用按钮,但不会再清空/清除列表。为什么?使用屏幕也很重要,因为它将成为不同应用程序中许多人之间的屏幕。


相关部分


                the_btn[0].text = ''

                the_btn[1].text = ''

                pairs.clear()

                the_btn.clear()

            elif pairs[0] == pairs[1]:

                the_btn[0].disabled = True

                the_btn[1].disabled = True

                pairs.clear()

                the_btn.clear()

完整代码:


from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import Screen, ScreenManager



Builder.load_string("""


<ScreenOne>:

    StackLayout:

        Button:

            id: btn_1

            text:''

            size_hint: 0.2, 0.15

            on_release: 

                root.b1()

                root.check()

        Button:

            id: btn_2

            text:''

            size_hint: 0.2, 0.15

            on_release: 

                root.b2()

                root.check()

        Button:

            id: btn_3

            text:''

            size_hint: 0.2, 0.15

            on_release: 

                root.b3()

                root.check()

        Button:

            id: btn_4

            text:''

            size_hint: 0.2, 0.15

            on_release: 

                root.b4()

                root.check()

        Button:

            id: exit

            text:'exit'

            size_hint: 1, 0.15 

            on_release: app.stop()



""")


class ScreenOne(Screen):



    def b4(self):

        b4 = self.ids['btn_4']     

        b4.text = 'K'

    def b3(self):

        b3 = self.ids['btn_3']     

        b3.text = 'K'

    def b2(self):

        b2 = self.ids['btn_2']     

        b2.text = 'L'

    def b1(self):

        b1 = self.ids['btn_1']     

        b1.text = 'L'


    def check(self):

        buttons = [(self.ids['btn_1']), (self.ids['btn_2']), (self.ids['btn_3']), (self.ids['btn_4'])]

        pairs = []

        the_btn = []

  


泛舟湖上清波郎朗
浏览 117回答 1
1回答

DIEA

我相信问题不在于列表没有被清除(它正在被清除),而是每次执行都会check()将它们添加回列表中。我认为如果您将方法中列表的初始编译限制check()为 non-disabled Buttons,它应该可以按您的意愿工作:def check(self):&nbsp; &nbsp; buttons = [(self.ids['btn_1']), (self.ids['btn_2']), (self.ids['btn_3']), (self.ids['btn_4']),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(self.ids['btn_5']), (self.ids['btn_6'])]&nbsp; &nbsp; pairs = []&nbsp; &nbsp; the_btn = []&nbsp; &nbsp; for x in buttons:&nbsp; &nbsp; &nbsp; &nbsp; if not x.disabled:&nbsp; # ignore disabled buttons&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pairs.append(x.text)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if x.text != '':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the_btn.append(x)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python