Изменение цвета нескольких кнопок

Еще одна возможность - использовать драйверы odbc, которые по умолчанию включены в расширения php, однако вам все равно придется раскомментировать их в вашем php.ini.

extension=php_pdo_odbc.dll

Не забудьте перезапустить сервер после этого; -)

И затем используйте его следующим образом:

$db = new PDO('odbc:Driver={SQL Server};Server=192.168.x.x;Database=DatabaseName; Uid=User;Pwd=Password');
$stmt = $db->query("SELECT the_usual FROM aTable WHERE all='well'");
-1
задан B Food 27 February 2019 в 04:01
поделиться

2 ответа

РЕШЕНИЕ

Путь, который содержит кнопки братьев и сестер, является self.parent.children. С помощью этой информации вы можете изменить background_color всех кнопок.

ПРИМЕР

def change_butt_color(self, *args):
    for child in self.parent.children:
        child.background_color = 1,1,1,1
    self.background_color = 0,0,0,0

замечают, как кнопки не ищутся с помощью ids. Вместо этого, self.parent.children используется, чтобы найти родителей-пуговиц для детей, то есть для себя и для братьев и сестер (self).

0
ответ дан B Food 27 February 2019 в 04:01
поделиться

Решение

Используйте on_touch_down, сбросьте background_color и проверьте collide_point

Событие касания виджета »on_touch_down [ 1121]

on_touch_down (touch)

Получать событие касания.

Параметры:
touch: Класс MotionEvent

Прием касаний. Касание в родительских координатах. См. относительное расположение для обсуждения систем координат.

Возвращает: bool Если True, отправка события касания остановится. Если значение False, событие будет по-прежнему отправляться на остальную часть дерева виджетов.

Управление вводом »Основные сведения о событиях касания

По умолчанию события касания отправляются всем отображаемым в данный момент виджетам. Это означает, что виджеты получают событие касания, независимо от того, происходит оно в своей физической области или нет.

...

Чтобы обеспечить максимальную гибкость, Kivy рассылает события всем виджетам и позволяет им решать, как на них реагировать. Если вы хотите отвечать только на события касания внутри виджета, вы просто проверяете:

def on_touch_down(self, touch):
    if self.collide_point(*touch.pos):
        # The touch has occurred inside the widgets area. Do stuff!
        pass

Пузырьки событий касания виджета

< blockquote>

Когда вы перехватываете события касания между несколькими виджетами, вам часто нужно знать порядок, в котором эти события распространяются. В Киви события всплывают от первого ребенка вверх через других детей. Если у виджета есть дочерние элементы, событие передается через его дочерние элементы, а затем передается в виджет после него.

Пример

main.py

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.lang import Builder


class CreateButton(Button):

    def on_touch_down(self, touch):
        if set(self.background_color) & set([0, 0, 0, 0]) == {0}:
            self.background_color = [1, 1, 1, 1]    # default texture is grey

        if self.collide_point(*touch.pos):
            self.background_color = [0, 0, 0, 0]    # black color


class OnTouchDownDemo(GridLayout):

    def __init__(self, **kwargs):
        super(OnTouchDownDemo, self).__init__(**kwargs)
        self.build_board()

    def build_board(self):
        # make 9 buttons in a grid
        for i in range(0, 9):
            button = CreateButton(id=str(i))
            self.add_widget(button)


Builder.load_file('main1.kv')


class OnTouchDownApp(App):

    def build(self):
        return OnTouchDownDemo()


if __name__ == "__main__":
    OnTouchDownApp().run()

main.kv

#:kivy 1.11.0

<CreateButton>:
    font_size: 50

<OnTouchDownDemo>:
    rows: 3
    cols: 3
    row_force_default: True
    row_default_height: 150
    col_force_default: True
    col_default_width: 150
    padding: [10]
    spacing: [10]

Выход

[1119 ] Kivy on_touch_down & collide_point [тысяча сто тридцать три]

0
ответ дан ikolim 27 February 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: