簡體   English   中英

相同的回調到奇異果中的多個按鈕

[英]Same callback to multiple buttons in kivy

我正在嘗試對多個按鈕使用相同的回調,我想要一種返回布爾值的東西來使用回調,就像在這里所做的那樣,但是我找不到這樣的東西。 有沒有一種方法可以將每個按鈕綁定不同的功能呢?

import kivy
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button

kivy.require('1.9.2')


class VelhaGame(GridLayout, Screen):
    def __init__(self, **kwargs):
        super(VelhaGame, self).__init__(**kwargs)
        self.cols = 3
        self.rows = 3
        self.font_size = 100

        self.button1 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button1)
        self.button1.bind(on_press=self.player_turn)

        self.button2 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button2)
        self.button2.bind(on_release=self.player_turn)

        self.button3 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button3)
        self.button3.bind(on_release=self.player_turn)

        self.button4 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button4)
        self.button4.bind(on_release=self.player_turn)

        self.button5 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button5)
        self.button5.bind(on_release=self.player_turn)

        self.button6 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button6)
        self.button6.bind(on_release=self.player_turn)

        self.button7 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button7)
        self.button7.bind(on_release=self.player_turn)

        self.button8 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button8)
        self.button8.bind(on_release=self.player_turn)

        self.button9 = Button(text='', font_size=self.font_size)
        self.add_widget(self.button9)
        self.button9.bind(on_release=self.player_turn)

        self.player1 = True

    def player_turn(self, *args):
        if self.player1:
            self.player1 = False
            if self.button1:
                self.button1.text = 'X'
            elif self.button2:
                self.button2.text = 'X'
            elif self.button3:
                self.button3.text = 'X'
            elif self.button4:
                self.button4.text = 'X'
            elif self.button5:
                self.button5.text = 'X'
            elif self.button6:
                self.button6.text = 'X'
            elif self.button7:
                self.button7.text = 'X'
            elif self.button8:
                self.button8.text = 'X'
            elif self.button9:
                self.button9.text = 'X'
        elif not self.player1:
            self.player1 = True
            if self.button1:
                self.button1.text = 'O'
            elif self.button2:
                self.button2.text = 'O'
            elif self.button3:
                self.button3.text = 'O'
            elif self.button4:
                self.button4.text = 'O'
            elif self.button5:
                self.button5.text = 'O'
            elif self.button6:
                self.button6.text = 'O'
            elif self.button7:
                self.button7.text = 'O'
            elif self.button8:
                self.button8.text = 'O'
            elif self.button9:
                self.button9.text = 'O'


class VelhaGameApp(App):
    def build(self):
        game = Screen()
        table_screen = VelhaGame()
        game.add_widget(table_screen)
        return game

if __name__ == '__main__':
    VelhaGameApp().run()

如果看到重復的代碼,通常意味着需要循環。 同樣,您要綁定的方法將作為調用它的button的第一個參數實例接收。

import kivy
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button


class VelhaGame(GridLayout, Screen):
    def __init__(self, **kwargs):
        super(VelhaGame, self).__init__(**kwargs)
        self.cols = 3
        self.rows = 3
        self.font_size = 100

        self.buttons = []

        for i in range(1, 10):
            button = Button(text='', font_size=self.font_size)
            button.bind(on_press=self.player_turn)
            self.add_widget(button)
            self.buttons.append(button)

        self.player1 = True

    def player_turn(self, instance, *args):
        if self.player1:
            self.player1 = False
            instance.text = 'X'
        elif not self.player1:
            self.player1 = True
            instance.text = '0'

class VelhaGameApp(App):
    def build(self):
        game = Screen()
        table_screen = VelhaGame()
        game.add_widget(table_screen)
        return game

if __name__ == '__main__':
    VelhaGameApp().run()

您還可以創建Button類的子類,但這在這里是一個過大的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM