WxPython MultiLine TextCtrl to 2D Array
Я пытаюсь использовать многострочный TextCtrl, чтобы получить введенные пользователем многострочные данные CSV и преобразовать их в 2D-массив. Я не был успешным. Есть идеи? Заранее спасибо.
import wx
import csv
import StringIO
Title="MultiLine TextCtrl to 2D Array"
class MainFrame(wx.Frame):
def __init__(self,title):
wx.Frame.__init__(self, None, title=title, pos=(140,140), size=(320,300))
panel=Panel(self)
class Panel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.InputData= wx.TextCtrl(self, value="1,2,3,4", pos=(20, 20), size=(150,200), style=wx.TE_MULTILINE)
self.button =wx.Button(self, label="GO", pos=(200,200))
self.Bind(wx.EVT_BUTTON, self.OnClick,self.button)
def OnClick(self,event):
DataString=self.InputData.GetValue()
f=StringIO.StringIO(DataString)
reader = csv.reader(f, delimiter=',')
x=list(reader)
print x
print x[0,0]
if __name__=="__main__":
app = wx.App(redirect=False)
frame = MainFrame(Title)
frame.Show()
app.MainLoop()
Я бы использовал wxGrid, но я хочу иметь возможность вставлять CSV-текст в поле, и я не знаю, как это сделать с помощью wxGrid. Вот пример данных, которые я хочу вставить в поле:
Point,X,Y,Z
1,-.500,-15.531,.000
2,.000,-15.531,2.354
3,.000,-14.719,2.354
4,.000,-14.719,2.273
5,.000,-14.531,2.273
1 ответ
Решение
csv.reader
возвращает список списков, поэтому вы должны распечатать элемент, используя такой термин, как x[3][2]
, где 3
выберет строку и 2
выбрал бы столбец.
Индексирование какx[3,2]
не работает для списка списков, но больше для многомерных массивов, как было бы использовано с numpy.