idfx

Untitled

Jun 13th, 2024
876
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.28 KB | Source Code | 0 0
  1. import pandas as pd
  2. import wx
  3. import wx.grid
  4. import ar_query
  5.  
  6. EVEN_ROW_COLOUR = "#CCE6FF"
  7. GRID_LINE_COLOUR = "#ccc"
  8.  
  9. # Объявление DataTable для привязки к wx.grid
  10. class DataTable(wx.grid.GridTableBase):
  11.     def __init__(self, data=None):
  12.         wx.grid.GridTableBase.__init__(self)
  13.         self.headerRows = 1
  14.         if data is None:
  15.             data = pd.DataFrame()
  16.         self.data = data
  17.  
  18.     def GetNumberRows(self):
  19.         return len(self.data)
  20.  
  21.     def GetNumberCols(self):
  22.         return len(self.data.columns) + 1
  23.  
  24.     def GetValue(self, row, col):
  25.         if col == 0:
  26.             return self.data.index[row]
  27.         return self.data.iloc[row, col - 1]
  28.  
  29.     def SetValue(self, row, col, value):
  30.         self.data.iloc[row, col - 1] = value
  31.  
  32.     def GetColLabelValue(self, col):
  33.         if col == 0:
  34.             if self.data.index.name is None:
  35.                 return "Index"
  36.             else:
  37.                 return self.data.index.name
  38.         return str(self.data.columns[col - 1])
  39.  
  40.     def GetTypeName(self, row, col):
  41.         return wx.grid.GRID_VALUE_STRING
  42.  
  43.     def GetAttr(self, row, col, prop):
  44.         attr = wx.grid.GridCellAttr()
  45.         if row % 2 == 1:
  46.             attr.SetBackgroundColour(EVEN_ROW_COLOUR)
  47.         return attr
  48.  
  49. class MyFrame(wx.Frame):
  50.     """
  51.    Главное окно
  52.    """
  53.  
  54.     def __init__(self):
  55.         """Конструктор"""
  56.         wx.Frame.__init__(self, None, wx.ID_ANY, title="Имя окна")
  57.         self._init_gui()
  58.         self.Layout()
  59.         self.Show()
  60.  
  61.     def _init_gui(self):
  62.         df: pd.DataFrame = ar_query.get_from_db()
  63.         table = DataTable(df)
  64.  
  65.         # Объявляем сетку и назначаем таблицу данных для нее
  66.         grid = wx.grid.Grid(self, -1)
  67.         grid.SetTable(table, takeOwnership=True)
  68.         grid.AutoSizeColumns()
  69.  
  70.         # Menu Bar
  71.         self.frame_menubar = wx.MenuBar()
  72.         wxglade_tmp_menu = wx.Menu()
  73.         self.frame_menubar.Append(wxglade_tmp_menu, "Файл")
  74.         wxglade_tmp_menu = wx.Menu()
  75.         self.frame_menubar.Append(wxglade_tmp_menu, "Справка")
  76.         self.SetMenuBar(self.frame_menubar)
  77.         # Menu Bar end
  78.  
  79.         # Tool Bar
  80.         self.frame_toolbar = wx.ToolBar(self, -1)
  81.         self.frame_toolbar.AddTool(
  82.             wx.ID_ANY,
  83.             "Новый ИД",
  84.             wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, (24, 24)),
  85.             wx.NullBitmap,
  86.             wx.ITEM_NORMAL,
  87.             "",
  88.             "",
  89.         )
  90.         self.SetToolBar(self.frame_toolbar)
  91.         self.frame_toolbar.Realize()
  92.         # Tool Bar end
  93.        
  94.         self.mainPanel = wx.Panel(self, wx.ID_ANY)
  95.  
  96.         mainSizer = wx.BoxSizer(wx.VERTICAL)
  97.         sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
  98.         mainSizer.Add((0, 0), 0, 0, 0)
  99.      
  100.  
  101.         sizer_1.Add(grid, 0, wx.EXPAND)
  102.  
  103.         # Добавляем кнопки, и переопределяем методы если нужно
  104.         cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel")
  105.         self.Bind(wx.EVT_BUTTON, self.OnCancel, cancelButton)
  106.  
  107.         proceedButton = wx.Button(self, wx.ID_OK, "Proceed")
  108.         self.Bind(wx.EVT_BUTTON, self.OnProceed, proceedButton)
  109.  
  110.         sizerbtns = wx.BoxSizer(wx.HORIZONTAL)
  111.         sizerbtns.Add(cancelButton, 0, wx.CENTER)
  112.         sizerbtns.Add(proceedButton, 0, wx.CENTER)
  113.  
  114.         mainSizer.Add(sizer_1, 0, wx.ALL, 5)
  115.         mainSizer.Add(sizerbtns, 0, wx.CENTER)
  116.  
  117.         sizer_1.SetSizeHints(self)
  118.         self.SetSizerAndFit(mainSizer)
  119.  
  120.         self.Bind(wx.EVT_CLOSE, self.exit)
  121.  
  122.     def exit(self, event):
  123.         self.Destroy()
  124.  
  125.     def OnCancel(self, event):
  126.         self.Destroy()
  127.  
  128.     def OnProceed(self, event):
  129.         self.Destroy()
  130.  
  131.  
  132. class MyMenuBar(wx.MenuBar):
  133.     def __init__(self, *args, **kwds):
  134.         # begin wxGlade: MyMenuBar.__init__
  135.         wx.MenuBar.__init__(self, *args, **kwds)
  136.         wxglasde_tmp_menu = wx.Menu()
  137.         self.Append(wxglade_tmp_menu, "Файл")
  138.         wxglade_tmp_menu = wx.Menu()
  139.         self.Append(wxglade_tmp_menu, "Справка")
  140.         # end wxGlade
  141.  
  142.  
  143. if __name__ == "__main__":
  144.     app = wx.App()
  145.     frame = MyFrame()
  146.     app.MainLoop()
  147.  
  148.  
  149.  
Advertisement
Add Comment
Please, Sign In to add comment