1

Тема: Прокритикуйте код[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