Тема: Прокритикуйте код[wxPython]
Доброго дня!
Написав генератор паролів на wxPython. Програма як і алгоритм проста і невеличка, але це перша моя программа в wxPython, яка в деякій мірі практична. Тому прошу оцінити стиль, алгортм. Буду вдячний за об'єктивну критику.
▼Головний модуль
# _*_ coding: utf-8 _*_
import wx
import gen
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, u"Генератор паролів", pos=(100,100), size=(690,500))
# panel
self.panel = wx.Panel(self, -1)
self.panel.SetBackgroundColour("white")
# check_boxs
self.check_box1 = wx.CheckBox(self.panel, -1, "A-Z", pos=(20,20),
size=(100,20))
self.check_box2 = wx.CheckBox(self.panel, -1, "a-z", pos=(20,50),
size=(100,20))
self.check_box3 = wx.CheckBox(self.panel, -1, "0-9", pos=(20,80),
size=(100,20))
self.check_box4 = wx.CheckBox(self.panel, -1,
u"Знаки правопису та інші (!, ;, %, ?, *, ...)",
pos=(20,110), size=(250,20))
self.check_box1.SetValue(True)
self.check_box2.SetValue(True)
self.check_box3.SetValue(True)
self.check_box4.SetValue(True)
# SpinCtrls
self.sc1 = wx.SpinCtrl(self.panel, -1, value="", pos=(200, 140), size=(80, -1),
min=1, max=100, initial=8)
self.sc2 = wx.SpinCtrl(self.panel, -1, value="", pos=(200, 170), size=(80, -1),
min=1, max=20, initial=10)
# Labels
self.label1 = wx.StaticText(self.panel, -1, u"Кількість символів: ",
pos=(20, 140), size=(150, -1))
self.label2 = wx.StaticText(self.panel, -1, u"Кількість паролів: ",
pos=(20, 170), size=(150, -1))
# TextCtrl
self.output_field = wx.TextCtrl(self.panel, -1, "",
pos=(310, 20), size=(330, 400),
style=wx.TE_MULTILINE)
self.output_field.SetInsertionPoint(0)
# button
self.button_ok = wx.Button(self.panel, id=-1, label="OK",
pos=(20, 200), size=(260, 220),
style=wx.ID_OK)
# Binders
self.Bind(wx.EVT_BUTTON, self.OnClickOk, self.button_ok)
def OnClickOk(self, event):
up_az = self.check_box1.GetValue()
low_az = self.check_box2.GetValue()
digitals = self.check_box3.GetValue()
ot_chars = self.check_box4.GetValue()
c_char = self.sc1.GetValue()
c_pass = self.sc2.GetValue()
# отримуємо список згенерованих паролей ф-цією gen.gen
pass_list = gen.gen(up_az, low_az, digitals, ot_chars, c_char, c_pass)
self.output_field.Clear()
# умова, котра змінює розміри фрейма та поля виводу паролю,
# в залежності від кількості символів в паролі
if c_char>35:
temp_w = 380+(c_char-35)*7
self.output_field.SetSize((temp_w, 400))
self.SetSize((temp_w+410, 500))
else:
self.output_field.SetSize((330, 400))
self.SetSize((690,500))
# вивід паролей
for password in pass_list:
self.output_field.AppendText(password+"\n")
class MyApp(wx.App):
def OnInit(self):
self.main_frame = Frame()
self.SetTopWindow(self.main_frame)
self.main_frame.Show()
return True
if __name__=="__main__":
app = MyApp()
app.MainLoop()
▼Додатковий модуль
# _*_ coding: utf-8 _*_
u""" Модуль містить ф-нкцію генерації паролей з латинських\n
символів, цифр та знаків правопису та інших."""
import random
import string
def gen(up_az, low_az, digit, chars, c_ch, c_pass):
gen_string = ""
res_list = []
if up_az:
gen_string += string.ascii_uppercase*3
if low_az:
gen_string += string.ascii_lowercase*3
if digit:
gen_string += string.digits
if chars:
gen_string += string.punctuation
for i in range(0, c_pass):
temp = ""
for j in range(0, c_ch):
temp += random.choice(gen_string)
res_list.append(temp)
return res_list