Я делаю видеоредактор с tkinter, и мне серьезно нужно его очистить и сделать его более удобным для чтения / более эффективным. Может ли кто-нибудь помочь мне очистить мой код (меня отправили сюда из stackoverflow)
Вот: https://github.com/MiniMinnoww/moviepy-video-editor
Части, которые мне как бы нужно выяснить:
- Кнопки и всплывающие окна. Мне нужно 2 функции для запуска 1 функции видеоредактора. Например, если я хочу добавить текст, мне нужно вызвать функцию, чтобы создать всплывающее окно для деталей текста, а затем вызвать Другой функция, когда кнопка нажата для фактического редактирования видеоклипа.
Вот что я пытался сделать (простыми словами):
def addText(self, x=0):
if x == 0:
button = Button(root, command=functools.partial(self.addText, 1))
else:
# run other stuff for function
Здесь вы можете видеть, что я повторно выполняю функцию, используя аргумент. Хотя это эффективно, это беспорядочно, и мне было интересно, есть ли лучший способ сделать это?
1 ответ
Отсрочка выполнения команды с помощью простой лямбды
Это очень похоже на то, что делали вы, но не нужно вводить более тяжелую артиллерию, например functools.partial
, особенно потому, что вы не знаете, кто будет читать ваш код, и они могут его не понять 🙁
Я бы пошел с
def addText(self, x=0):
if x == 0:
button = Button(root, command=lambda: self.addText(1))
else:
# run other stuff for function
Если это все еще вас раздражает из-за рекурсивного вызова, подумайте:
def auxiliaryStuff(self, x):
# run other stuff for function
def addText(self, x=0):
if x == 0:
button = Button(root, command=lambda: self.auxiliaryStuff(1))
else:
self.auxiliaryStuff(x)
Я предполагаю, что x
может принимать значения, отличные от 1
или же 0
из других мест вашего кода. Если они всегда либо 1
или же 0
и они просто представляют собой флаг, рассмотрите возможность использования True
а также False
вместо.