LINUX.ORG.RU

Надавайте по рукам

 , , , ,


1

1

Шалом.

В свободное от алкоголизма время стараюсь окончательно не деградировать и пытаюсь изучать Python. Дабы сразу не скатится в не ту степь, прошу местных питончан надавать мне по рукам за какие-либо косяки (от названия переменных в моём хелловорлде, заканчивая неправильным использованием методов и функций):

from tkinter import *
from tkinter.constants import *
from googletrans import Translator

RootWindow = Tk()
RootWindow.title('Переводчик')

TextToTranslate = Text(RootWindow, width=40, height=10)
TranslatedText = Text(RootWindow, width=40, height=10)

TranslationButton = Button(RootWindow, text='Перевести')
ExitButton = Button(RootWindow, text='Выход', command=RootWindow.destroy)

LangSrcList = ['ru','en']
LangDestList = LangSrcList.copy()

LangSrcVar = StringVar(RootWindow)
LangSrcVar.set(LangSrcList[0])

LangDestVar = StringVar(RootWindow)
LangDestVar.set(LangDestList[1])

LangSrcMenu = OptionMenu(RootWindow, LangSrcVar, *LangSrcList)
LangDestMenu = OptionMenu(RootWindow, LangDestVar, *LangDestList)

TranslatorObject = Translator()

def TranslatorFunc(text):
	TranslatedText.delete(1.0, END)
	TranslationText = TextToTranslate.get(1.0, END)
	TranslationText = TranslatorObject.translate(TranslationText, src=LangSrcVar.get(), dest=LangDestVar.get()).text
	TranslatedText.insert(1.0, TranslationText)

TranslationButton.bind('<Button-1>', TranslatorFunc)

TextToTranslate.pack()
TranslatedText.pack()

TranslationButton.pack(side=LEFT)
ExitButton.pack(side=RIGHT)

LangSrcMenu.pack(side=LEFT, expand=True)
LangDestMenu.pack(side=RIGHT, expand=True)

RootWindow.mainloop()
Заранее благодарю за истязания.

★★★★★

RootWindow

CamelCase и camelCase забудь и выкинь. Одобряем только для имен классов. Переменные — snake_case.
А больше у тебя оценивать нечего, по совести говоря. Одно дерганье методов.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Anoxemian

Этот тупняк на случай, если различатся будет список src и dest, чтоб прост написать dest = ['it', 'is', 'fu'] А вообще, подозреваю что можно выдёргивать список поддерживаемых языков.

IPR ★★★★★ ()
Ответ на: комментарий от IPR

Вангую, что если зациклить 1кк итераций, то вот это будет вернее:

LangSrcList = ['ru','en']
LangDestList = ['ru','en']

это же интерпретатор. а учтывая конкретно этот хеллоуворлд

LangSrcList = ['ru','en']
LangDestList = ['en','ru']

Anoxemian ★★★★★ ()

Глобальных переменных, в идеале, быть не должно, если это не константы. А оценивать здесь действительно нечего.

Повернул ты заведомо не туда, если решил не читать даже PEP8.

WitcherGeralt ★★ ()

import *

Выкинуть и никогда не использовать. Никогда от слова совсем.

text='Перевести'

Никогда не засовывай в исходники текст вне ASCII

tkinter

Выкинуть и никогда не использовать.

LangSrcList = ['ru','en']
LangDestList = LangSrcList.copy()

Прикола не понял.

Остальное:

  • Все перенести в класс и его методы. Никогда не пиши просто стену текста который сразу начинает исполняться, это не баш
  • Глобальные переменные не использовать
  • 80-100 символов в строке макс

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

lovesan ★☆ ()
Ответ на: комментарий от lovesan
  • Все перенести в класс и его методы. Никогда не пиши просто стену текста который сразу начинает исполняться, это не баш
  • Глобальные переменные не использовать

Свои джавовские (или какие там) привычки оставь при себе. Класс тут не нужен.

eternal_sorrow ★★★★★ ()
Ответ на: комментарий от eternal_sorrow

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

anonymous ()
Ответ на: комментарий от IPR

для этого есть gettext

Есть. Но не обязательно, чтобы язык идентификаторов (язык по-умолчанию) был английский. Кроме того, даже для английского языка недостаточно ASCII.

monk ★★★★★ ()
Ответ на: комментарий от monk

И во сколько раз standalone .exe будет весить больше с ними? Ну gtk3 я помню говорили под винду минимум 50мб занимает... Под линуксом проще наверное. А с Qt...?

Deleted ()

шалям и те!

структуры ддданных ака агригируй в словарь поля из откуда и в парный элемент двухэлементного массива поля куда языка

код станет ещё проще - камелькэйснутость сама отсохнит

anonymous ()
  • перевести CamelCase в snake_case и вообще соблюдать pep8, а чтобы это было легче и не бегать с этим на форумы взять IDE Pycharm
  • поменять списки на кортежи
  • убрать вторую строку
  • выкинуть tk, заменив его на qt или на худой конец gtk
  • как только кода станет больше и появится своя логика, обмазаться юнит тестами
  • вынести перевод и всю его логику в класс [\list] Последний пункт не обязателен, но ИМХО так будет лучше и проще.
anonymous ()