Найти - Пользователи
Полная версия: Оценить код с точки зрения читабельности. wx
Начало » GUI » Оценить код с точки зрения читабельности. wx
1
BOBAH
 import wx
from wx.lib.buttons import GenButton
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, wx.ID_ANY,
                         size=(x, y),
                         style=wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
        # ----------------- Подразделение на панели -----------------------------
        self.Dashboard = wx.Panel(self, wx.ID_ANY,
                                  size=(x, y * .07))
        self.PanelContacts = wx.Panel(self, wx.ID_ANY,
                                      size=(x * .244, y * .87),
                                      pos=(0, y * .07))
        self.PanelMessages = wx.Panel(self, wx.ID_ANY,
                                      size=(x * .75, y * .66),
                                      pos=(x * .25, y * .07))
        self.PanelSend = wx.Panel(self, wx.ID_ANY,
                                  size=(x * .75, y * .2),
                                  pos=(x * .25, y * .74))
        # ---------------------- Создание кнопок --------------------------------
        self.BtnLogin = GenButton(self.Dashboard, wx.ID_ANY,
                                  label='Вход',
                                  size=(wx.Button.GetDefaultSize()[0] * .55, wx.Button.GetDefaultSize()[1]),
                                  pos=(x - wx.Button.GetDefaultSize()[0], y * .015))
        # -------------------------- Марафет ------------------------------------
        self.BtnLogin.SetBackgroundColour('#848484')
        self.BtnLogin.SetForegroundColour('White')
        self.Dashboard.SetBackgroundColour('#848484')
        self.SetOwnBackgroundColour('#686868')
        self.Bind(wx.EVT_CLOSE, lambda event: App.ExitMainLoop())
        self.BtnLogin.Bind(wx.EVT_MOUSE_CAPTURE_CHANGED, lambda event: DialogLogin())
class DialogLogin(wx.Dialog):
    def __init__(self):
        super().__init__(None, wx.ID_ANY,
                         size=(x / 3, y / 3),
                         title='Вход')
        # ------------------- Создание виджетов ---------------------------------
        self.LabelLogin = wx.StaticText(self, wx.ID_ANY, label='Логин:')
        self.LabelPassword = wx.StaticText(self, wx.ID_ANY, label='Пароль:')
        self.EntryLogin = wx.TextCtrl(self, wx.ID_ANY, style=wx.BORDER)
        self.EntryPassword = wx.TextCtrl(self, wx.ID_ANY, style=wx.BORDER | wx.TE_PASSWORD)
        self.BtnOk = GenButton(self, wx.ID_ANY, label='Вход')
        self.BtnRegistration = GenButton(self, wx.ID_ANY, label='Регистрация')
        #-------------------- Размещение виджетов -------------------------------
        self.BoxSizer = wx.BoxSizer(wx.VERTICAL)
        self.BoxSizer.Add(self.LabelLogin, flag=wx.LEFT, border=x / 20)
        self.BoxSizer.Add(self.EntryLogin, flag=wx.LEFT, border=x / 20)
        self.BoxSizer.Add(self.LabelPassword, flag=wx.LEFT, border=x / 20)
        self.BoxSizer.Add(self.EntryPassword, flag=wx.LEFT, border=x / 20)
        self.BoxSizer.Add(self.BtnOk, flag=wx.TOP | wx.ALIGN_CENTER, border=y / 60)
        self.BoxSizer.Add(self.BtnRegistration, flag=wx.TOP | wx.ALIGN_CENTER, border=y / 60)
        self.SetSizer(self.BoxSizer)
        # ------------------------Марафет ---------------------------------------
        self.LabelLogin.SetForegroundColour('White')
        self.LabelPassword.SetForegroundColour('White')
        self.EntryLogin.SetForegroundColour('White')
        self.EntryPassword.SetForegroundColour('White')
        self.BtnOk.SetForegroundColour('White')
        self.BtnRegistration.SetForegroundColour('White')
        self.EntryLogin.SetBackgroundColour('#848484')
        self.EntryPassword.SetBackgroundColour('#848484')
        self.BtnOk.SetBackgroundColour('#848484')
        self.BtnRegistration.SetBackgroundColour('#848484')
        self.SetBackgroundColour('#848484')
        self.Centre()
        self.Show()
if __name__ == '__main__':
    App = wx.App()
    x = wx.DisplaySize()[0] * .66
    y = wx.DisplaySize()[1] * .66
    frame = MyFrame()
    frame.Centre()
    frame.Show()
    App.MainLoop()
py.user.next
BOBAH
  
        self.BtnLogin = GenButton(self.Dashboard, wx.ID_ANY,
                                  label='Вход',
                                  size=(wx.Button.GetDefaultSize()[0] * .55, wx.Button.GetDefaultSize()[1]),
                                  pos=(x - wx.Button.GetDefaultSize()[0], y * .015))
  
        self.BtnLogin = GenButton(
            self.Dashboard,
            wx.ID_ANY,
            label='Вход',
            size=(wx.Button.GetDefaultSize()[0] * .55,
                  wx.Button.GetDefaultSize()[1]),
            pos=(x - wx.Button.GetDefaultSize()[0], y * .015))
Почему лучше выравнивать так, а не по скобке, - потому что тогда можно делать очень длинное имя как у self.BtnLogin, так и у GenButton. Если же ты по скобке выравниваешь, то ты уже скован в длине имени, так как из-за сдвигающейся скобки сдвигается и весь блок параметров.

И вот эти поясняющие комментарии-разделители нафиг не нужны. Старайся писать без них. Иначе ты комментарий поставишь, а потом ты или кто-то другой начнёт редактировать тот блок, к которому относится комментарий, и забудет поправить комментарий, после чего комментарий начнёт описывать непонятно что, так как код к тому времени уже изменится и не будет ему соответствовать. Короче, если тебе нужны комментарии, чтобы понимать код, значит это хороший знак, чтобы переработать сам код, так как он становится непонятным.
FishHook
BOBAH
Позволю себе немного перефразировать py.user.next. Это хорошо, когда код документируется, но гораздо лучше когда он само-документируется.

    
def _create_widgets(self):
   ...
def _style_widgets(self):
   ...
      
Во-первых, теперь безо всяких комментариев понятно, что делает каждый метод.
Во-вторых, такая более глубокая декомпозиция логически группирует операции, а следовательно делает код более структурированным и понятным для чтения. И в-третьих, теперь вы можете, например, в целях отладки отключить применение стилей закомментировав один вызов функции, это даст меньше возможностей совершить ошибку, случайно убрав что-то нужное.

Оценить код с точки зрения читабельности
1) PEP8!!!! Несоблюдение стандартов сильно уменьшает читаемость.
2) Многочисленные магические числа. Вот откуда мне знать, что такое .55 и откуда это взялось? Дайте всем константам имена. Если константы связаны друг с другом какой-то математикой, пусть эти вычисления будут явными.

    
SUCCESS_BG = '#848484'
DANDER_BG = "#00FF00"
PANEL_BG = "#BFBFBF"
BORDER_BG = "#000000"
   
class LoginDialogBox:
     box_width_ratio = 0.5 
     box_width = screen_width *  box_width_ratio    
     panel_width = box_width * 0.75
   
     def _create_widgets(self):
              self.panel = wx.Panel(self, wx.ID_ANY,
                                      size=(self.panel_width, self.panel_height))
        
    def _style_widgets(self):
           self.panel.SetBackgroundColour(PANEL_BG)
           self.delete_button.SetBackgroundColour(DANDER_BG)
           self.ok_button.SetBackgroundColour(SUCCESS_BG)
во-первых, это улучшает читаемость и сопровождение кода. Во-вторых, вы получаете возможность манипулировать одним значением box_width_ratio, остальные значения рассчитываются автоматически, вам не надо за этим следить и у вас нет возможности ошибиться.




This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB