22from portWindow import Ui_Dialog
33import codeEditor
44import Serial_Core
5- from PySide6 import QtCore
5+
66from PySide6 .QtGui import QIcon , QShortcut , QAction ,QCursor
7- from PySide6 .QtWidgets import QApplication , QMainWindow , QDialog , QListWidgetItem , QMenu , QLabel
7+ from PySide6 .QtCore import Qt
8+ from PySide6 .QtWidgets import QApplication , QMainWindow , QDialog , QListWidgetItem , QMenu , QLabel , QLineEdit , QGridLayout
89import sys
910import os
1011
@@ -56,6 +57,7 @@ def bind_methods():
5657 port_dialog .Clear .clicked .connect (port_dialog .recv_Text .clear )
5758 port_dialog .AutoLast .toggled .connect (func_jump_to_last_line )
5859 port_dialog .stopRun .clicked .connect (lambda : serial_thread .serial .write (b"\r \x03 \x03 " ))
60+ port_dialog .rebootMCU .clicked .connect (lambda : serial_thread .serial .write (b"from machine import reset\r \n reset()\r \n " ))
5961 w_p .rejected .connect (func_for_close_port_dialog )
6062 w_p .closeEvent = func_for_close_port_dialog
6163
@@ -129,6 +131,15 @@ def create_right_menu_PC():
129131 action_1 = QAction (text = "上传到单片机" )
130132 action_1 .triggered .connect (lambda :file_transport ("PC" , main_window .PC_files .currentItem ().text ()))
131133 menu .addAction (action_1 )
134+
135+ action_3 = QAction (text = "刷新" )
136+ action_3 .triggered .connect (fresh_PC_files )
137+ menu .addAction (action_3 )
138+
139+ action_4 = QAction (text = "重命名" )
140+ action_4 .triggered .connect (lambda : rename_file (main_window .PC_files .currentItem ().text ()))
141+ menu .addAction (action_4 )
142+
132143 action_2 = QAction (text = "删除" )
133144 action_2 .triggered .connect (lambda :remove_file ("PC" , main_window .PC_files .currentItem ().text ()))
134145 menu .addAction (action_2 )
@@ -204,13 +215,15 @@ def fresh_PC_files():
204215 main_window .PC_files .addItem (a )
205216 main_window .PC_files .setCurrentRow (0 )
206217
207- def file_transport (device :str , file_name :str ):
208- """传输文件"""
218+ def file_transport (device :str , file_name :str , out_name :str = None ):
219+ """传输文件 源文件设备 文件名 另存名"""
220+ if out_name is None :
221+ out_name = file_name
209222 if serial_manager .pyb is not None :
210223 if device == "PC" :
211224 try :
212225 serial_manager .pyb .enter_raw_repl ()
213- serial_manager .pyb .fs_put (file_name , file_name )
226+ serial_manager .pyb .fs_put (file_name , out_name )
214227 serial_manager .fresh_files ()
215228 main_window .statusBar .showMessage (f"已传输{ file_name } " )
216229 except Exception as e :
@@ -222,7 +235,7 @@ def file_transport(device:str, file_name:str):
222235 else :
223236 main_window .statusBar .showMessage (f"下载文件{ file_name } 到本地" )
224237 serial_manager .pyb .enter_raw_repl ()
225- serial_manager .pyb .fs_get (file_name , file_name )
238+ serial_manager .pyb .fs_get (file_name , out_name )
226239 serial_manager .fresh_files ()
227240 fresh_PC_files ()
228241 except Exception as e :
@@ -258,13 +271,49 @@ def open_file(device:str, file_name:str):
258271 main_window .statusBar .showMessage (codeEditor .open_file (file_name ))
259272 elif device == "MCU" :
260273 try :
261- serial_manager .pyb .enter_raw_repl ()
262- serial_manager .pyb .fs_get (file_name , "_" + file_name )
263- fresh_PC_files ()
274+ file_transport ("MCU" , file_name , "_" + file_name )
264275 main_window .statusBar .showMessage (codeEditor .open_file ("_" + file_name ))
276+ file_transport ("PC" , "_" + file_name , file_name )
277+ remove_file ("PC" , "_" + file_name )
265278 except Exception as e :
266279 func_for_serial_erro (str (e ))
267280
281+ def rename_file (file_name ):
282+ """弹出一个小窗口重命名文件"""
283+ fName , fType = split_file_name (file_name )
284+ redialog = QDialog ()
285+ shortcut = QShortcut (redialog )
286+ shortcut .setKey (u'Return' )
287+ shortcut .activated .connect (lambda : redialog .close ())
288+ shortcut2 = QShortcut (redialog )
289+ shortcut2 .setKey (u'Enter' )
290+ shortcut2 .activated .connect (lambda : redialog .close ())
291+ gridLayout = QGridLayout (redialog )
292+ gridLayout .setSpacing (0 )
293+ gridLayout .setObjectName (u"gridLayout" )
294+ gridLayout .setContentsMargins (0 , 0 , 0 , 0 )
295+ redialog .setWindowFlag (Qt .FramelessWindowHint )
296+ redialog .move (QCursor .pos ())
297+ Lin = QLineEdit (redialog )
298+ Lin .setText (fName )
299+ gridLayout .addWidget (Lin , 0 , 0 , 1 , 1 )
300+ redialog .exec ()
301+ after_name = Lin .text ()
302+ if not os .path .exists (after_name + fType ):
303+ os .rename (file_name , after_name + fType )
304+ main_window .statusBar .showMessage (f"{ file_name } ->{ after_name + fType } " )
305+ else :
306+ main_window .statusBar .showMessage (f"{ after_name + fType } already exists." )
307+ fresh_PC_files ()
308+
309+ def split_file_name (file :str ):
310+ """得到文件名与后缀分离的结果"""
311+ out = ""
312+ str_list = file .split ("." )
313+ for i in str_list [:- 1 ]:
314+ out += i
315+ return out , "." + str_list [- 1 ]
316+
268317def main ():
269318 bind_methods ()
270319 init_methods ()
0 commit comments