Форум сайта python.su
taxolне смешите тут алгоритмом и не пахнет
предложенного AD0DE412 алгоритма
taxolв смысле копипаста?
вставлять сразу массивом
taxolну вот например
хотя бы натолкните на мысль
# -*- coding: utf-8 -*- ########################################################################### ## Python code generated with wxFormBuilder (version Jun 17 2015) ## http://www.wxformbuilder.org/ ## ## PLEASE DO "NOT" EDIT THIS FILE! ########################################################################### import wx import wx.xrc import csv ########################################################################### ## Python 2.7 ## wx-3.0-msw ########################################################################### class newTextCntrl(wx.TextCtrl): pass class MyFrame ( wx.Frame ): def __init__( self, parent ): wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"xz", pos = wx.DefaultPosition, size = wx.Size( 355,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) bSizer1 = wx.BoxSizer( wx.VERTICAL ) bSizer3 = wx.BoxSizer( wx.HORIZONTAL ) self.m_spinCtrl1 = wx.SpinCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 1, 1000000, 0 ) bSizer3.Add( self.m_spinCtrl1, 1, wx.ALL, 5 ) self.m_button1 = wx.Button( self, wx.ID_ANY, u"ok", wx.DefaultPosition, wx.DefaultSize, 0 ) bSizer3.Add( self.m_button1, 0, wx.ALL, 5 ) bSizer1.Add( bSizer3, 0, wx.EXPAND, 5 ) bSizer4 = wx.BoxSizer( wx.VERTICAL ) self.m_scrolledWindow3 = wx.ScrolledWindow( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL ) self.m_scrolledWindow3.SetScrollRate( 5, 5 ) self.bSizer9 = wx.BoxSizer( wx.VERTICAL ) self.tbl = [] self.bSizer9.Add( self.xz(), 1, wx.EXPAND, 5 ) self.m_scrolledWindow3.SetSizer( self.bSizer9 ) self.m_scrolledWindow3.Layout() self.bSizer9.Fit( self.m_scrolledWindow3 ) bSizer4.Add( self.m_scrolledWindow3, 1, wx.EXPAND |wx.ALL, 5 ) bSizer1.Add( bSizer4, 1, wx.EXPAND, 5 ) bSizer6 = wx.BoxSizer( wx.HORIZONTAL ) self.m_button5 = wx.Button( self, wx.ID_ANY, u"save", wx.DefaultPosition, wx.DefaultSize, 0 ) bSizer6.Add( self.m_button5, 1, wx.ALL, 5 ) bSizer1.Add( bSizer6, 0, wx.EXPAND, 5 ) self.SetSizer( bSizer1 ) self.Layout() self.Centre( wx.BOTH ) # Connect Events self.Bind( wx.EVT_TEXT_PASTE, self.get_paste ) self.Bind( wx.EVT_CLOSE, self.close_btn ) self.m_button1.Bind( wx.EVT_BUTTON, self.btn_ok_evt ) self.m_button5.Bind( wx.EVT_BUTTON, self.btn_save_evt ) def __del__( self ): pass # Virtual event handlers, overide them in your derived class def btn_ok_evt( self, event ): self.gen(self.m_spinCtrl1.Value) event.Skip() def close_btn( self, event ): exit() event.Skip() def btn_save_evt( self, event ): # пример with wx.FileDialog(self, "Save csv file", wildcard="csv files (*.csv)|*.csv", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) as fileDialog: if fileDialog.ShowModal() == wx.ID_CANCEL: return # the user changed their mind # save the current contents in the file pathname = fileDialog.GetPath() try: with open(pathname, 'w') as csvfile: writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) for i in self.tbl: writer.writerow([i[0].GetLineText(0), i[1].GetLineText(0)]) except IOError: wx.LogError("Cannot save current data in file '%s'." % pathname) event.Skip() def xz(self): bSizer10 = wx.BoxSizer( wx.HORIZONTAL ) m_textCtrl5 = wx.TextCtrl( self.m_scrolledWindow3, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) bSizer10.Add( m_textCtrl5, 1, wx.ALL, 5 ) m_textCtrl6 = wx.TextCtrl( self.m_scrolledWindow3, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) bSizer10.Add( m_textCtrl6, 1, wx.ALL, 5 ) self.tbl_indx = [m_textCtrl5, m_textCtrl6] self.tbl.append(self.tbl_indx) return bSizer10 def gen(self, need_row): self.bSizer9.DeleteWindows() self.tbl = [] for i in range(need_row): self.bSizer9.Add(self.xz() , 1, wx.EXPAND, 5 ) self.m_scrolledWindow3.SetSizer( self.bSizer9 ) self.m_scrolledWindow3.Layout() self.m_scrolledWindow3.FitInside() def get_paste(self, event): # при вставке получаем че в буфере и где произошло # ну и еще вставка чего либо в текстовое поле # лучше разделить на два три метода пишу для примера # зарание извиняюсь за неканон text_data = wx.TextDataObject() if wx.TheClipboard.Open(): success = wx.TheClipboard.GetData(text_data) wx.TheClipboard.Close() if success: # че где че куда # / 0 - текст в буфере # / 1 - об'ект где произошло событие # / 2 -об'екты в кхм в нашей как бы таблице print ( "-->", "/ 0:", text_data.GetText(), "/ 1:", event.GetEventObject(), "/ 2", self.tbl) # нужно распарсить текст из буфера # и вставить в нужные элементы таблицы # вставлять это так # к примеру вставляем в первую линию и второй столбец "example" self.tbl[0][1].SetValue("example") # или "example1" text_ = self.tbl[0][1] print text_ text_.SetValue("example1") return text_data.GetText() class MyApp(wx.App): def OnInit(self): wx.InitAllImageHandlers() frame_1 = MyFrame(None) self.SetTopWindow(frame_1) frame_1.Show() return 1 if __name__ == "__main__": app = MyApp(0) app.MainLoop()
doza_andда конечно … ммм спсб (:
Это вопрос?
по донату отписался на почтуда забейте у меня c форума на почту сообщения не идут да и не к чему
Отредактировано AD0DE412 (Янв. 13, 2020 13:38:18)
Офлайн
дополню пжлуй
# -*- coding: utf-8 -*- ###################################################################### ## Python code generated with wxFormBuilder (version Jun 17 2015) ## http://www.wxformbuilder.org/ ## ## PLEASE DO "NOT" EDIT THIS FILE! ###################################################################### import wx import wx.xrc import wx.grid import csv ###################################################################### ## Python 2.7 ## wx-3.0-msw ###################################################################### class MyFrame1(wx.Frame): def __init__(self,parent): wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = "xz", pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) bSizer1 = wx.BoxSizer(wx.VERTICAL) bSizer2 = wx.BoxSizer(wx.HORIZONTAL) self.m_spinCtrl1 = wx.SpinCtrl(self, wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 1, 10**6, 1) bSizer2.Add(self.m_spinCtrl1, 1, wx.ALL, 5) self.m_button1 = wx.Button( self, wx.ID_ANY, u"ok", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add(self.m_button1, 0, wx.ALL, 5) bSizer1.Add(bSizer2, 0, wx.EXPAND, 5) bSizer3 = wx.BoxSizer( wx.VERTICAL ) self.m_scrolledWindow1 = wx.ScrolledWindow(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL) self.m_scrolledWindow1.SetScrollRate(5, 5) self.bSizer6 = wx.BoxSizer(wx.VERTICAL) #--- self.make_grid(1) #-- self.bSizer6.Add(self.m_grid2, 1, wx.ALL|wx.EXPAND, 5) self.m_scrolledWindow1.SetSizer(self.bSizer6) self.m_scrolledWindow1.Layout() self.bSizer6.Fit(self.m_scrolledWindow1) bSizer3.Add(self.m_scrolledWindow1, 1, wx.ALL|wx.EXPAND, 5) bSizer1.Add(bSizer3, 1, wx.EXPAND, 5) bSizer5 = wx.BoxSizer(wx.HORIZONTAL) #self.m_button3 = wx.Button(self, wx.ID_ANY, u"load", #wx.DefaultPosition, wx.DefaultSize, 0) #bSizer5.Add(self.m_button3, 1, wx.ALL, 5) self.m_button2 = wx.Button(self, wx.ID_ANY, u"save", wx.DefaultPosition, wx.DefaultSize, 0) bSizer5.Add(self.m_button2, 1, wx.ALL|wx.EXPAND, 5) bSizer1.Add(bSizer5, 0, wx.EXPAND, 5) self.SetSizer(bSizer1) self.Layout() self.Centre(wx.BOTH) #--- self.my_bind() #--- def my_bind(self): # Connect Events #self.Bind(wx.EVT_UPDATE_UI, self.update_gui) self.m_button1.Bind(wx.EVT_BUTTON, self.new_rows) self.Bind(wx.EVT_CLOSE, self.close_win) self.Bind(wx.EVT_TEXT_PASTE, self.paste_cell) #self.m_button3.Bind(wx.EVT_BUTTON, self.load_fd) self.m_button2.Bind(wx.EVT_BUTTON, self.save_file) def make_grid(self, rows): self.m_grid2 = wx.grid.Grid(self.m_scrolledWindow1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) # Grid self.m_grid2.CreateGrid(rows, 2) self.m_grid2.EnableEditing(True) self.m_grid2.EnableGridLines(True) self.m_grid2.EnableDragGridSize(True) self.m_grid2.SetMargins(0, 0) # Columns self.m_grid2.SetColSize(0, 150) self.m_grid2.SetColSize(1, 150) self.m_grid2.EnableDragColMove(False) self.m_grid2.EnableDragColSize(True) self.m_grid2.SetColLabelSize(30) self.m_grid2.SetColLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Rows self.m_grid2.EnableDragRowSize(True) self.m_grid2.SetRowLabelSize(80) self.m_grid2.SetRowLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) # Label Appearance # Cell Defaults self.m_grid2.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_TOP) return self.m_grid2 def __del__(self): pass # Virtual event handlers, overide them in your derived class #def update_gui(self, event): #event.Skip() def close_win( self, event ): exit() event.Skip() def new_rows(self, event): self.m_grid2.Destroy() self.make_grid(self.m_spinCtrl1.GetValue()) self.bSizer6.Add(self.m_grid2, 1, wx.ALL|wx.EXPAND, 5) self.m_scrolledWindow1.SetSizer(self.bSizer6) self.m_scrolledWindow1.Layout() self.bSizer6.FitInside(self.m_scrolledWindow1) event.Skip() #def load_fd(self, event): #event.Skip() def save_file( self, event ): # пример сохранения таблицы в файл with wx.FileDialog(self, "Save csv file", wildcard="csv files (*.csv)|*.csv", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT ) as fileDialog: if fileDialog.ShowModal() == wx.ID_CANCEL: return # the user changed their mind # save the current contents in the file pathname = fileDialog.GetPath() try: with open(pathname, 'w') as csvfile: writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) for i in range(self.m_grid2.GetNumberRows()): writer.writerow( [self.m_grid2.GetCellValue(i, 0), self.m_grid2.GetCellValue(i, 1)]) except IOError: wx.LogError( "Cannot save current data in file '%s'." \ % pathname) event.Skip() event.Skip() def paste_cell(self, event): # пример вставки текста в зависимости от его типа tmp = [self.m_grid2.GetGridCursorRow(), self.m_grid2.GetGridCursorCol()] # если вы будете менять, обвешивать итд опцию вствки то # основные действия будут происходить в коде ниже поэтому # лучше выделить под это отдельную функцию или даже класс buf = self.from_buf() lenbuf = len(buf[0]) iterbuf = iter(buf[0]) if buf[1] == 1: # если это таблица то ... for i in range(self.m_grid2.GetNumberRows()): # здесь нужно подумать какое то оно такое ... if i >= tmp[0]: try: temp = next(iterbuf) except Exception as err: print err if len(temp) >= 2: # при вставке таблицы обрезает ее # до двух столбцов self.m_grid2.SetCellValue(i, 0, temp[0]) self.m_grid2.SetCellValue(i, 1, temp[1]) elif buf[1] == 0: # иначе self.m_grid2.SetCellValue(tmp[0], tmp[1], buf[0]) #event.Skip() def from_buf(self): # пример преобразования значений из текстового буфера # то есть берем че в буфере классифицируем это и # подготавливаем данные для дальнейшего использования # выдаем данные и что это text_data = wx.TextDataObject() if wx.TheClipboard.Open(): success = wx.TheClipboard.GetData(text_data) wx.TheClipboard.Close() if success: text = text_data.GetText() # если вы будете менять, обвешивать итд опцию вствки то # основные действия будут происходить в коде ниже поэтому # лучше выделить под это отдельную функцию или даже класс # если есть табы и несколько строк то это таблица if '\t' in text and '\n' in text: return [i.split('\t') for i in text.split('\n')], 1 else: # иначе это просто текст return text, 0 class MyApp(wx.App): def OnInit(self): wx.InitAllImageHandlers() frame_1 = MyFrame1(None) self.SetTopWindow(frame_1) frame_1.Show() return 1 if __name__ == "__main__": app = MyApp(0) app.MainLoop()
Офлайн