Помещение лицензии в каждом файле кода? [закрытый]

Решение

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

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

on_touch_down (touch)

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

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

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

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

blockquote>

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

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

...

Чтобы обеспечить максимальную гибкость, 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>

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

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

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 ] Kivy on_touch_down & collide_point [тысяча сто тридцать три]

90
задан Nietzche-jou 12 May 2009 в 14:32
поделиться

9 ответов

Один за пределами кода, пожалуйста! Не знаю, как насчет других, но мне не нравится видеть одно и то же поверх каждого файла.

Думаю, я читал это несколько раз, просто просматривая page_down.

71
ответ дан 24 November 2019 в 07:05
поделиться

Он вам не нужен для лицензии, подойдет один внешний файл, если ясно, какие файлы он охватывает.

Однако для Copyright у вас должен быть уведомление об авторских правах на каждом фрагменте текста.

1
ответ дан 24 November 2019 в 07:05
поделиться

Лицензионное соглашение - неправильный термин здесь, поскольку люди, просматривающие исходный код, обычно не являются конечными пользователями.

С юридической точки зрения это тоже не имеет значения; об авторских правах не требуется заявлять явно.

По сути, все, что вы достигаете, - это меньший риск случайного нарушения людьми условий вашей лицензии. Вам нужно будет решить, насколько это важно для вас.

Я бы сказал, что лучший компромисс - это поместить очень короткий заголовок, содержащий ссылку (абсолютный URL-адрес, а также относительный URL-адрес в рамках проекта) на полный текст лицензии в каждый файл исходного кода. Таким образом, любой, кому небезразлична лицензия, знает, где ее найти (в идеале, люди, которые готовы платить огромные лицензионные сборы; вы, безусловно, хотите, чтобы эти люди могли связаться с вами!)

25
ответ дан 24 November 2019 в 07:05
поделиться

Нет, вам не нужно вводить лицензию каждый файл исходного кода.

Если вы присмотритесь, то большинство приложений FOSS этого не делают. Они помещают заявление об авторских правах в верхней части каждого файла и короткое предложение, в котором говорится, под какой лицензией находится файл, и где вы можете найти полный текст лицензии. Обычно они указывают вам на файл КОПИРОВАНИЯ или ЛИЦЕНЗИИ, содержащий полный текст лицензии, и / или на веб-сайт, содержащий полный текст (в случае, если файла КОПИРОВАНИЯ больше нет).

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

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

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

14
ответ дан 24 November 2019 в 07:05
поделиться

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.

7
ответ дан 24 November 2019 в 07:05
поделиться

IANAL,

Предполагая, что вы говорите о лицензировании, а не о лицензионном соглашении, вы можете вынести лицензию извне. Это почти всегда делается с действительно длинными лицензиями, такими как GPL. Было бы глупо помещать всю лицензию GPL в каждый файл. Обычно у вас будет просто уведомление о том, где вы можете найти настоящую лицензию. Это совершенно законно. Однако с действительно короткими лицензиями, такими как BSD / Apache / MIT / что угодно, проще просто включить лицензию в каждый файл, так как уведомление о том, где найти лицензию, будет почти такой же длины, как и сама лицензия.

3
ответ дан 24 November 2019 в 07:05
поделиться

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.

2
ответ дан 24 November 2019 в 07:05
поделиться

Если ваш код будет скомпилирован, так что вы просто распространяете двоичный файл, то это не имеет значения. Потому что, когда вы создаете двоичный файл, комментарии удаляются до того, как начнется процесс компиляции. Имеет значение только то, будете ли вы распространять фактический исходный код с открытым или закрытым исходным кодом. Обычно это имеет значение, если вы будете распространять приложение на языке сценариев, который не компилируется.

1
ответ дан 24 November 2019 в 07:05
поделиться

Что я делаю, так это помещаю двухстрочный комментарий вверху файла, в котором указывается название моей компании, дата последней редакции и имя лицензии, которая есть в исходном файле, а затем в в самом низу файла - краткая версия лицензии.

Конечно, полная лицензия (все они в случае нескольких лицензий) всегда прилагается к исходному файлу и каталогам выпуска.

1
ответ дан 24 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

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