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()
Заранее благодарю за истязания.

★★★★★

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

На тебе по рукам: тыщ-тыщ! Не благодари.

Macrocosm
()
Ответ на: комментарий от KrasnoGlazik

Убрал, остался с момента, когда было просто import tkinter

IPR ★★★★★
() автор топика

RootWindow

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

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

CamelCase и camelCase забудь и выкинь. Одобряем только для имен классов. Переменные — snake_case.

Насколько я понимаю, это из PEP8? Я прост ещё не читал.

IPR ★★★★★
() автор топика

инстансы классов должны быть в нижнем регистре через подчеркивания. text_to_translate

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

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

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

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

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

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

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

Anoxemian ★★★★★
()

«изучать питон» и «деградировать» - это синонимы.

anonymous
()

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

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

WitcherGeralt ★★
()

import *

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

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

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

tkinter

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

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

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

Остальное:

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

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

lovesan ★★
()

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

линтер себе заведи

по сабжу, если ты списки менять не собираешься - используй кортежи вместо

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)

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

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

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

eternal_sorrow ★★★★★
()

стараюсь окончательно не деградировать и пытаюсь изучать Python

Лучше уж бухай.

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

лисповые

t.пишу изредка на схемке и гажу define'ами

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

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

anonymous
()

надавать мне по рукам за какие-либо косяки

Возьми flake8 - он всё что нужно надаёт.

slovazap ★★★★★
()

Выглядит ужасно. Это надо в функции/классы оборачивать.

Im_not_a_robot ★★★★★
()

'<Button-1>'

TForm1.Button1_Click; Впрочем, может, в tkinter так принято.

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

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

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

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

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

Deleted
()

шалям и те!

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

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

anonymous
()

В свободное от алкоголизма время

Ты хотел сказать от школы. ЛОЛ

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