1
+ #coding:utf-8
2
+ import wx
3
+ import os
4
+ from FileDeal import FILEDEAL , ListData
5
+ from ObjectListView import ObjectListView , ColumnDefn
6
+ import WXListView
7
+ from WXListView import ListCtrlView
8
+ import pyperclip
9
+ import time
10
+
11
+ class GRMUI (wx .Frame ):
12
+ #文件处理类
13
+ fd = FILEDEAL ()
14
+ #第一个文件路径
15
+ filename = ""
16
+ #中间数据
17
+ middenDatas = []
18
+ #多个文件列表
19
+ csvFilesPathList = []
20
+ #输出文件名列表
21
+ xmlNamesList = []
22
+
23
+
24
+ def __init__ (self ):
25
+ super (GRMUI , self ).__init__ (None , wx .ID_ANY , "GRM" , size = (1000 ,700 ), pos = (20 ,20 ))
26
+ #self.SetIcon(wx.Icon('GRM.ico', wx.BITMAP_TYPE_ICO))
27
+ self .panel = wx .Panel (self )
28
+ self .createMenu ()
29
+ self .addSubViews ()
30
+ self .panel .Fit ()
31
+ self .Show ()
32
+ tt = time .time ()
33
+
34
+ # if tt > 1492788449.00:
35
+ # dlg = wx.MessageDialog(None, u"测试过期", u"提示", wx.YES_NO | wx.ICON_QUESTION)
36
+ # if dlg.ShowModal() == wx.ID_YES or dlg.ShowModal() == wx.ID_NO:
37
+ # self.Close()
38
+ # dlg.Destroy()
39
+
40
+ def createMenu (self ):
41
+ '''
42
+ 添加菜单栏
43
+ '''
44
+ menubar = wx .MenuBar ()
45
+
46
+ file = wx .Menu ()
47
+ fileMenu = file .Append (101 , u'&打开文件' , 'Open a new document' )
48
+ file .AppendSeparator ()
49
+ filesMenu = file .Append (102 , u'&打开文件夹' , 'Open the documents' )
50
+ help = file .Append (103 , u'&帮助' , 'Open the documents' )
51
+ #help = wx.Menu()
52
+
53
+ menubar .Append (file , u'&打开' )
54
+ #menubar.Append(help, u'&帮助')
55
+ self .SetMenuBar (menubar )
56
+
57
+ self .Bind (wx .EVT_MENU , self .OpenFileFun , fileMenu )
58
+ self .Bind (wx .EVT_MENU , self .OpenFilesFun , filesMenu )
59
+ self .Bind (wx .EVT_MENU , self .QQ , help )
60
+
61
+ def QQ (self , event ):
62
+ self .ShowMessage ("--.-/--.-/---../.----/....-/----./--.../..---/...--/--.../...--" )
63
+
64
+ #打开文件
65
+ def OpenFileFun (self , event ):
66
+ file_wildcard = u"CSV 文件 (*.csv)|*.csv"
67
+ dlg = wx .FileDialog (self , "Open paint file..." ,
68
+ os .getcwd (),
69
+ style = wx .OPEN ,
70
+ wildcard = file_wildcard )
71
+ if dlg .ShowModal () == wx .ID_OK :
72
+ suc , rep = self .fd .CSVToListFun (dlg .GetPath ())
73
+ if suc :
74
+ self .cleanAllData ()
75
+ self .filename = dlg .GetPath ()
76
+ self .csvFilesPathList .append (dlg .GetPath ())
77
+ self .getMiddenDatas (rep )
78
+ self .csvListView .SetObjects (self .middenDatas )
79
+ for i in range (len (self .middenDatas )):
80
+ self .csvListView .SetCheckState (self .middenDatas [i ], True )
81
+ self .csvListView .RefreshObjects (self .middenDatas )
82
+ #修改保存目录
83
+ if len (self .filePathView .GetLabelText ()) == 0 :
84
+ self .filePathView .SetLabelText (os .path .dirname (self .filename ))
85
+ else :
86
+ self .ShowMessage (rep )
87
+ dlg .Destroy ()
88
+
89
+ def OpenFilesFun (self , event ):
90
+ '''
91
+ 打开文件夹
92
+ '''
93
+ dlg = wx .DirDialog (self , u"选择文件夹" , style = wx .DD_DEFAULT_STYLE )
94
+ if dlg .ShowModal () == wx .ID_OK :
95
+ dirPath = dlg .GetPath ()
96
+ tempFileList = []
97
+ for filename in os .listdir (dirPath ):
98
+ fileType = os .path .splitext (filename )[1 ]
99
+ if fileType == '.csv' or fileType == '.CSV' :
100
+ tempFileList .append (dirPath + "\\ " + filename )
101
+
102
+ if len (tempFileList ) == 0 :
103
+ self .ShowMessage (u"文件夹内没有csv文件" )
104
+ else :
105
+ suc , rep = self .fd .CSVToListFun (tempFileList [0 ])
106
+ if suc :
107
+ self .cleanAllData ()
108
+ self .filename = tempFileList [0 ]
109
+ self .csvFilesPathList = tempFileList
110
+ self .getMiddenDatas (rep )
111
+ self .csvListView .SetObjects (self .middenDatas )
112
+ for i in range (len (self .middenDatas )):
113
+ self .csvListView .SetCheckState (self .middenDatas [i ], True )
114
+ self .csvListView .RefreshObjects (self .middenDatas )
115
+ # 修改保存目录
116
+ if len (self .filePathView .GetLabelText ()) == 0 :
117
+ self .filePathView .SetLabelText (os .path .dirname (self .filename ))
118
+ else :
119
+ self .ShowMessage (rep )
120
+ print self .csvFilesPathList ;
121
+ dlg .Destroy ()
122
+
123
+ def addSubViews (self ):
124
+ self .gbSizer = wx .GridBagSizer (5 ,5 )
125
+ #text
126
+ self .gbSizer .Add (wx .StaticText (self .panel , label = u"CSV目录" ), span = (1 , 4 ),pos = (0 , 0 ), flag = wx .LEFT | wx .CENTER , border = 10 )
127
+ self .gbSizer .Add (wx .StaticText (self .panel , label = u"XML目录" ), span = (1 , 6 ),pos = (0 , 4 ), flag = wx .LEFT , border = 10 )
128
+
129
+ self .createCSVListView ()
130
+ self .createXMLListView ()
131
+ self .addBottomViews ()
132
+ # self.gbSizer.AddGrowableCol(4)
133
+ self .gbSizer .AddGrowableCol (6 )
134
+ self .gbSizer .AddGrowableRow (1 )
135
+ self .panel .SetSizer (self .gbSizer )
136
+
137
+ def createCSVListView (self ):
138
+ self .csvListView = ListCtrlView (self .panel ,style = wx .LC_REPORT | wx .SUNKEN_BORDER )
139
+ self .csvListView .SetEmptyListMsg (u"请先打开文件(夹)" )
140
+ keyColumn = ColumnDefn ("CSV_Key" , "left" , 250 , "key" )
141
+ self .csvListView .SetColumns ([
142
+ keyColumn
143
+ #ColumnDefn("Value", "left", 250, "value"),
144
+ ])
145
+ self .csvListView .InstallCheckStateColumn (keyColumn )
146
+ self .csvListView .Bind (WXListView .EVT_OVL_CHECK_EVENT , self .HandleCheckbox )
147
+ self .csvListView .Bind (wx .EVT_LIST_ITEM_RIGHT_CLICK , self .CSVRightClick )
148
+ self .gbSizer .Add (self .csvListView , span = (8 , 4 ), pos = (1 , 0 ), flag = wx .LEFT | wx .TOP | wx .EXPAND , border = 5 )
149
+
150
+ def createXMLListView (self ):
151
+ self .xmlListView = ObjectListView (self .panel ,style = wx .LC_REPORT | wx .SUNKEN_BORDER )
152
+ self .xmlListView .SetEmptyListMsg (u"请先打开文件(夹)" )
153
+ self .xmlListView .SetColumns ([
154
+ ColumnDefn ("XML_Key" , "left" , 200 , "keyCopy" ),
155
+ ColumnDefn (u"XML_Value (填入CSV_Key,可用+累加)" , "left" , 400 , "keyMap" ,isSpaceFilling = True ),
156
+ ])
157
+ self .xmlListView .cellEditMode = ObjectListView .CELLEDIT_DOUBLECLICK
158
+ self .gbSizer .Add (self .xmlListView , span = (8 ,6 ), pos = (1 , 4 ), flag = wx .TOP | wx .RIGHT | wx .EXPAND , border = 5 )
159
+
160
+ #右击菜单
161
+ def CSVRightClick (self , event ):
162
+ menu = wx .wx .Menu ()
163
+ menu .Bind (wx .EVT_MENU , self .CSVMenuSelection )
164
+ for (id , title ) in WXListView .MenuTitleDict1 .items ():
165
+ menu .Append (id , title )
166
+ self .PopupMenu (menu , event .GetPoint ())
167
+ menu .Destroy ()
168
+
169
+ # 右击菜单操作
170
+ def CSVMenuSelection (self , event ):
171
+ str = ""
172
+ text = WXListView .MenuTitleDict1 [event .GetId ()]
173
+ if text .find ("+" ) == - 1 :
174
+ str = self .csvListView .GetSelectedObject ().key
175
+ else :
176
+ str = "+" + self .csvListView .GetSelectedObject ().key
177
+ print str
178
+ pyperclip .copy (str )
179
+
180
+ #单选框按钮点击
181
+ def HandleCheckbox (self , e ):
182
+ if e .value :
183
+ self .xmlListView .AddObject (e .object )
184
+ else :
185
+ self .xmlListView .RemoveObject (e .object )
186
+
187
+ def addBottomViews (self ):
188
+ self .gbSizer .Add (wx .StaticLine (self .panel ), span = (1 , 10 ), pos = (9 , 0 ), flag = wx .EXPAND | wx .BOTTOM , border = 10 )
189
+ #切割数据
190
+ self .gbSizer .Add (wx .StaticText (self .panel , label = u"输入CSV_Key(截取对应XML_Value的\\ 后的内容作为值,不输入默认不截取)" , style = wx .LEFT | wx .BOTTOM ), span = (2 , 2 ),
191
+ pos = (10 , 4 ), flag = wx .LEFT , border = 10 )
192
+ self .valueSplitView = wx .TextCtrl (self .panel , - 1 , value = '' )
193
+ self .gbSizer .Add (self .valueSplitView , span = (2 , 3 ), pos = (10 , 6 ),
194
+ flag = wx .LEFT | wx .EXPAND )
195
+
196
+
197
+ #命名规则
198
+ self .gbSizer .Add (wx .StaticText (self .panel , label = u"输入XML文件命名规则" ,style = wx .LEFT | wx .BOTTOM ), span = (2 , 1 ), pos = (12 , 4 ), flag = wx .LEFT , border = 10 )
199
+ self .xmlNameView = wx .TextCtrl (self .panel , - 1 , value = '' )
200
+ self .gbSizer .Add (self .xmlNameView , span = (2 , 4 ), pos = (12 , 5 ),
201
+ flag = wx .LEFT | wx .EXPAND )
202
+
203
+ #保存目录
204
+ button1 = wx .Button (self .panel , - 1 , u"选择保存目录(尽量英文目录)" )
205
+ self .Bind (wx .EVT_BUTTON , self .OnClickFilePath , button1 )
206
+ button1 .SetDefault ()
207
+ self .gbSizer .Add (button1 , span = (2 , 1 ),
208
+ pos = (14 , 4 ), flag = wx .LEFT , border = 10 )
209
+ self .filePathView = wx .TextCtrl (self .panel , - 1 , value = '' )
210
+ self .filePathView .Enable (False )
211
+ self .gbSizer .Add (self .filePathView , span = (2 , 4 ), pos = (14 , 5 ),
212
+ flag = wx .LEFT | wx .EXPAND )
213
+
214
+ # 保存按钮
215
+ button2 = wx .Button (self .panel , - 1 , u"保存当前XML文件" )
216
+ self .Bind (wx .EVT_BUTTON , self .OnClickSaveFile , button2 )
217
+ button2 .SetDefault ()
218
+ self .gbSizer .Add (button2 , span = (2 , 5 ),
219
+ pos = (16 , 4 ), flag = wx .LEFT | wx .EXPAND , border = 10 )
220
+
221
+ sb = wx .StaticBox (self .panel , label = u"提示" )
222
+
223
+ boxsizer = wx .StaticBoxSizer (sb , wx .VERTICAL )
224
+ text = wx .StaticText (self .panel , label = u"1.左边右击“复制+key”,默认添加+号\n 2.可修改xml的XML_Key名\n 3.右侧xml的内容:(填入CSV_Key,可用+累加)\n 4.命名:*表示原文件名,#表示数字(以1开始)\n 5.命名:可最多添加{CSV_Key}获取的值作为文件名的一部分\n 6.截取:截取框输入CSV_Key,内容的\\ 后的内容作为值" )
225
+ font = wx .Font (10 , wx .DEFAULT , wx .NORMAL , wx .NORMAL , False )
226
+ text .SetFont (font )
227
+ boxsizer .Add (text ,
228
+ flag = wx .EXPAND , border = 5 )
229
+ self .gbSizer .Add (boxsizer , pos = (10 , 0 ), span = (8 , 4 ),
230
+ flag = wx .TOP | wx .LEFT | wx .RIGHT | wx .EXPAND , border = 10 )
231
+
232
+ def OnClickFilePath (self , event ):
233
+ dlg = wx .DirDialog (self , u"选择文件夹" , style = wx .DD_DEFAULT_STYLE )
234
+ if dlg .ShowModal () == wx .ID_OK :
235
+ print dlg .GetPath () # 文件夹路径
236
+ self .filePathView .SetLabelText (dlg .GetPath ())
237
+ dlg .Destroy ()
238
+
239
+ def OnClickSaveFile (self , event ):
240
+ #print os.path.dirname(self.csvFilesPathList[0])
241
+ #命名规则:
242
+ str = self .xmlNameView .GetValue ()
243
+
244
+
245
+ datas = self .xmlListView .GetObjects ()
246
+ if len (datas ) == 0 :
247
+ self .ShowMessage (u"没有xml内容" )
248
+ elif len (self .filePathView .GetLabelText ()) == 0 :
249
+ self .ShowMessage (u"请先选择文件保存目录" )
250
+ else :
251
+ dirPath = self .filePathView .GetLabelText ()
252
+ suc , rep = self .fd .end (str ,dirPath ,self .valueSplitView .GetValue (),self .xmlListView .GetObjects (),self .csvFilesPathList )
253
+ if suc :
254
+ dlg = wx .MessageDialog (None , u"是否查看xml文件" , u"提示" , wx .YES_NO | wx .ICON_QUESTION )
255
+ if dlg .ShowModal () == wx .ID_YES :
256
+ dd = "start explorer {0}" .format (self .filePathView .GetLabelText ())
257
+ os .system (dd .encode ('utf-8' ))
258
+ dlg .Destroy ()
259
+ else :
260
+ self .ShowMessage (rep )
261
+
262
+ # dirPath = self.filePathView.GetLabelText()
263
+ # xmlFilesPathList = []
264
+ # #文件命名
265
+ # for i in range(len(self.csvFilesPathList)):
266
+ # TotalFileName = os.path.basename(self.csvFilesPathList[i])
267
+ # fileName = os.path.splitext(TotalFileName)[0]
268
+ # tempStr = str.replace('*',fileName)
269
+ # tempStr = tempStr.replace('#',"{0}".format(i+1))
270
+ # xmlFilesPathList.append((dirPath+"\\"+tempStr+".xml"))
271
+ # print xmlFilesPathList
272
+ # suc, rep = self.fd.ListToXML(xmlFilesPathList,datas,self.csvFilesPathList)
273
+ # if suc:
274
+ # dlg = wx.MessageDialog(None, u"是否查看xml文件", u"提示", wx.YES_NO | wx.ICON_QUESTION)
275
+ # if dlg.ShowModal() == wx.ID_YES:
276
+ # dd = "start explorer {0}".format(self.filePathView.GetLabelText())
277
+ # os.system(dd.encode('utf-8'))
278
+ # dlg.Destroy()
279
+ # else:
280
+ # self.ShowMessage(rep)
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+ #原始文件转化为可读文件
291
+ def getMiddenDatas (self , lists ):
292
+ for i in range (len (lists [0 ])):
293
+ self .middenDatas .append (ListData (lists [0 ][i ], lists [1 ][i ]))
294
+
295
+ #消息提醒
296
+ def ShowMessage (self , message ):
297
+ wx .MessageBox (message .encode ("gbk" ), u'提示' , wx .OK | wx .ICON_INFORMATION )
298
+
299
+ #清除所有数据
300
+ def cleanAllData (self ):
301
+ #清除列表和中间数据
302
+ self .csvListView .RemoveObjects (self .middenDatas )
303
+ self .xmlListView .RemoveObjects (self .middenDatas )
304
+ self .filename = ""
305
+ self .middenDatas = []
306
+ self .csvFilesPathList = []
307
+ self .xmlNamesList = []
308
+
309
+ if __name__ == '__main__' :
310
+ app = wx .App (False )
311
+ frame = GRMUI ()
312
+ app .MainLoop ()
0 commit comments