Добавление функции в меню tkinter для запуска ТОЛЬКО если x! = Нет - PullRequest
0 голосов
/ 26 января 2019

Я хотел бы иметь строку меню на моем графическом интерфейсе. В этой строке меню я хочу, чтобы была 1 метка, при щелчке по этой метке следует проверить значение file_data_for_processing. Затем, в зависимости от того, правда это или нет, будет запущена 1 из 2 функций. Я хотел бы проверить это в том же утверждении, которое я вызываю функцией.

Код, который я получил до сих пор:

self.menu_main_top_evaluation.add_command(label=self.test_me,
    command=lambda: guif.run_test(self.test_me, self.file_data_for_processing))

Как сейчас, мне нужно будет выполнить третью функцию, которая сначала проверит значение file_data_for_processing, затем, в зависимости от результата, мне нужно будет выбрать, какую функцию вызывать.

1 Ответ

0 голосов
/ 26 января 2019

Лучший способ сделать это с помощью стандартной функции.Лямбда действительно полезна только тогда, когда вы должны передать аргументы функции, что вам не нужно делать здесь.В противном случае лямбда просто делает карту труднее писать, труднее понимать и труднее отлаживать.Лично для меня мое эмпирическое правило - никогда не использовать лямбду, пока я абсолютно не должен использовать лямбду (или ее эквивалент, такой как functools.partial).

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

Я написал бы код, подобный следующему:

class Something(...):
    def __init__(self, ...):
        ...
        self.menu_main_top_evaluation.add_command(
            label=self.test_me, command=self._test_me
        )
        ...

    def _test_me(self):
        if self.file_data_for_processing:
            do_something()
        else:
            do_something_else()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...