Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Оценить код с точки зрения читабельности. wx [RSS Feed]

#1 Апрель 21, 2019 17:08:06

BOBAH
Зарегистрирован: 2019-02-17
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Оценить код с точки зрения читабельности. wx

 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()

Офлайн

#2 Апрель 21, 2019 18:29:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Оценить код с точки зрения читабельности. wx

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. Если же ты по скобке выравниваешь, то ты уже скован в длине имени, так как из-за сдвигающейся скобки сдвигается и весь блок параметров.

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



Отредактировано py.user.next (Апрель 21, 2019 18:33:28)

Офлайн

#3 Май 3, 2019 13:16:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Оценить код с точки зрения читабельности. wx

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, остальные значения рассчитываются автоматически, вам не надо за этим следить и у вас нет возможности ошибиться.






Отредактировано FishHook (Май 3, 2019 13:19:00)

Офлайн

  • Начало
  • » GUI
  • » Оценить код с точки зрения читабельности. wx[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version