Используйте on_touch_down
, сбросьте background_color
и проверьте collide_point
Событие касания виджета »on_touch_down [ 1121]
on_touch_down (touch)
Получать событие касания.
Параметры:
touch: Класс MotionEventПрием касаний. Касание в родительских координатах. См. относительное расположение для обсуждения систем координат.
Возвращает: bool Если True, отправка события касания остановится. Если значение False, событие будет по-прежнему отправляться на остальную часть дерева виджетов.
blockquote>Управление вводом »Основные сведения о событиях касания
По умолчанию события касания отправляются всем отображаемым в данный момент виджетам. Это означает, что виджеты получают событие касания, независимо от того, происходит оно в своей физической области или нет.
...
Чтобы обеспечить максимальную гибкость, Kivy рассылает события всем виджетам и позволяет им решать, как на них реагировать. Если вы хотите отвечать только на события касания внутри виджета, вы просто проверяете:
blockquote>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
: font_size: 50 : 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 ] [тысяча сто тридцать три]
Один за пределами кода, пожалуйста! Не знаю, как насчет других, но мне не нравится видеть одно и то же поверх каждого файла.
Думаю, я читал это несколько раз, просто просматривая page_down.
Он вам не нужен для лицензии, подойдет один внешний файл, если ясно, какие файлы он охватывает.
Однако для Copyright у вас должен быть уведомление об авторских правах на каждом фрагменте текста.
Лицензионное соглашение - неправильный термин здесь, поскольку люди, просматривающие исходный код, обычно не являются конечными пользователями.
С юридической точки зрения это тоже не имеет значения; об авторских правах не требуется заявлять явно.
По сути, все, что вы достигаете, - это меньший риск случайного нарушения людьми условий вашей лицензии. Вам нужно будет решить, насколько это важно для вас.
Я бы сказал, что лучший компромисс - это поместить очень короткий заголовок, содержащий ссылку (абсолютный URL-адрес, а также относительный URL-адрес в рамках проекта) на полный текст лицензии в каждый файл исходного кода. Таким образом, любой, кому небезразлична лицензия, знает, где ее найти (в идеале, люди, которые готовы платить огромные лицензионные сборы; вы, безусловно, хотите, чтобы эти люди могли связаться с вами!)
Нет, вам не нужно вводить лицензию каждый файл исходного кода.
Если вы присмотритесь, то большинство приложений FOSS этого не делают. Они помещают заявление об авторских правах в верхней части каждого файла и короткое предложение, в котором говорится, под какой лицензией находится файл, и где вы можете найти полный текст лицензии. Обычно они указывают вам на файл КОПИРОВАНИЯ или ЛИЦЕНЗИИ, содержащий полный текст лицензии, и / или на веб-сайт, содержащий полный текст (в случае, если файла КОПИРОВАНИЯ больше нет).
Как сказал Майкл Боргвардт в своей ответы, по закону этого делать не нужно. Но желательно использовать исходный код, который вы собираетесь распространять, поскольку люди могут сразу увидеть, у кого есть авторские права и какая лицензия.
по закону этого делать не нужно. Но желательно использовать исходный код, который вы собираетесь распространять, поскольку люди могут сразу увидеть, у кого есть авторские права и какая лицензия. по закону этого делать не нужно. Но желательно использовать исходный код, который вы собираетесь распространять, поскольку люди могут сразу увидеть, у кого есть авторские права и какая лицензия.I think the reasoning behind putting it in each file is a legal one. If the agreement is in each file, there is no chance of someone stumbling across a piece of code without being exposed to the license.
It may not be a good one, but all the big boys use it so if it's just visual pain, I would look for a better reason not to do the same.
If you're using GPL this is more of an issue, but if you're using public domain licenses like BSD or MIT, I don't think you really care what people do with the code anyway. I suppose it depends on how strict your license is.
IANAL,
Предполагая, что вы говорите о лицензировании, а не о лицензионном соглашении, вы можете вынести лицензию извне. Это почти всегда делается с действительно длинными лицензиями, такими как GPL. Было бы глупо помещать всю лицензию GPL в каждый файл. Обычно у вас будет просто уведомление о том, где вы можете найти настоящую лицензию. Это совершенно законно. Однако с действительно короткими лицензиями, такими как BSD / Apache / MIT / что угодно, проще просто включить лицензию в каждый файл, так как уведомление о том, где найти лицензию, будет почти такой же длины, как и сама лицензия.
It depends on what the license dictates. The GPL, for example, instructs you to put a short notice in every source file, include the entire license somewhere in your source distribution, and make your source distribution available to anyone who get a copy of the binary distribution.
If you disagree with this, and it is YOUR code, you're free to choose a more agreeable license, or create your own.
Если ваш код будет скомпилирован, так что вы просто распространяете двоичный файл, то это не имеет значения. Потому что, когда вы создаете двоичный файл, комментарии удаляются до того, как начнется процесс компиляции. Имеет значение только то, будете ли вы распространять фактический исходный код с открытым или закрытым исходным кодом. Обычно это имеет значение, если вы будете распространять приложение на языке сценариев, который не компилируется.
Что я делаю, так это помещаю двухстрочный комментарий вверху файла, в котором указывается название моей компании, дата последней редакции и имя лицензии, которая есть в исходном файле, а затем в в самом низу файла - краткая версия лицензии.
Конечно, полная лицензия (все они в случае нескольких лицензий) всегда прилагается к исходному файлу и каталогам выпуска.