有誰知道這里發生了什么?目標:有很多按鈕。單擊兩個,它們都單獨將一個項目附加到一個空列表中。當列表的 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 Appfrom kivy.lang import Builderfrom kivy.uix.screenmanager import Screen, ScreenManagerBuilder.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 = []
1 回答

DIEA
TA貢獻1820條經驗 獲得超2個贊
我相信問題不在于列表沒有被清除(它正在被清除),而是每次執行都會check()將它們添加回列表中。我認為如果您將方法中列表的初始編譯限制check()為 non-disabled Buttons,它應該可以按您的意愿工作:
def check(self):
buttons = [(self.ids['btn_1']), (self.ids['btn_2']), (self.ids['btn_3']), (self.ids['btn_4']),
(self.ids['btn_5']), (self.ids['btn_6'])]
pairs = []
the_btn = []
for x in buttons:
if not x.disabled: # ignore disabled buttons
pairs.append(x.text)
if x.text != '':
the_btn.append(x)
添加回答
舉報
0/150
提交
取消