@@ -103,9 +103,10 @@ def set_code(self, code):
103103 def set_mode (self , mode ):
104104 self .mode = mode
105105 self .setCursorWidth (3 if self .mode == 1 else 1 )
106- self .setReadOnly (self .mode == 1 )
106+ # self.setReadOnly(self.mode == 1)
107107 self .update ()
108108
109+
109110 def __init__ (self , font_size = 18 ):
110111 super ().__init__ ()
111112 # self.setTabStopWidth()
@@ -181,7 +182,9 @@ def show_all_code(self):
181182 self .setText (autopep8 .fix_code (self .code ))
182183 self .set_mode (0 )
183184
185+
184186 def keyPressEvent (self , e : QtGui .QKeyEvent ) -> None :
187+ self .setFocusPolicy (Qt .StrongFocus )
185188
186189 if e .key () == Qt .Key_Escape :
187190 self .set_mode (1 if self .mode == 0 else 0 )
@@ -191,7 +194,8 @@ def keyPressEvent(self, e: QtGui.QKeyEvent) -> None:
191194 if self .mode == 1 :
192195 if e .key () == Qt .Key_Down :
193196 self .show_all_code ()
194-
197+ elif e .text () == "º" :
198+ self .complete_line (True )
195199 elif e .key () == Qt .Key_Control :
196200 return
197201 elif e .key () == Qt .Key_End :
@@ -353,8 +357,6 @@ def __init__(self):
353357 self .text_edit .ctrl_enter .connect (self .execute_code )
354358 self .text_edit .info .connect (self .update_status_bar )
355359 self .text_edit .setPlaceholderText ("Write Python code here..." )
356- self .text_edit .installEventFilter (self )
357-
358360
359361 self .line_number_area = PythonEditor (self .font_size )
360362 self .line_number_area .setStyleSheet ("QTextEdit { color: #a0a0a0;}" )
@@ -367,7 +369,7 @@ def __init__(self):
367369 bar .addAction ("✕" , self .clear_all )
368370 bar .addAction ("⬇" , self .text_edit .show_all_code )
369371
370- self .keep_banner = bar .addAction ("# " )
372+ self .keep_banner = bar .addAction ("" )
371373 self .keep_banner .setCheckable (True )
372374 self .keep_banner .setChecked (False )
373375
@@ -457,13 +459,7 @@ def fill():
457459 q .activated .connect (self .open_slides )
458460
459461 q = QShortcut ("Ctrl+Tab" , self )
460- q .activated .connect (lambda : self .tabs .setCurrentIndex ((self .tabs .currentIndex () + 1 )% self .tabs .count ()))
461-
462- q = QShortcut ("F1" , self )
463- q .activated .connect (lambda : self .text_edit .setFocus ())
464-
465- q = QShortcut ("F2" , self )
466- q .activated .connect (lambda : self .jupyter_widget ._control .setFocus ())
462+ q .activated .connect (self .toggle_focus )
467463
468464 def resize ():
469465 splitter .setSizes ([int (self .width () * 0.5 ), int (self .width () * 0.5 )])
@@ -475,6 +471,25 @@ def resize():
475471 if self .config .get ("fullscreen" , False ):
476472 self .toggle_fullscreen ()
477473
474+ def toggle_focus (self ):
475+ if self .text_edit .hasFocus ():
476+ self .jupyter_widget ._control .setFocus ()
477+ else :
478+ self .text_edit .setFocus ()
479+
480+
481+
482+ def keyPressEvent (self , a0 ):
483+ if a0 .key () == Qt .Key_F11 :
484+ self .toggle_fullscreen ()
485+ elif Qt .Key_F1 <= a0 .key () <= Qt .Key_F10 :
486+ idx = a0 .key () - Qt .Key_F1
487+
488+ if idx < self .tabs .count ():
489+ self .tabs .setCurrentIndex (idx )
490+
491+ super ().keyPressEvent (a0 )
492+
478493 def save_as (self ):
479494 filename , ok = QFileDialog .getSaveFileName (self , "Save code" , filter = "Python files (*.py)" , directory = "progs" )
480495 if ok :
@@ -593,17 +608,6 @@ def toggle_fullscreen(self):
593608 self .showFullScreen ()
594609 self .menuBar ().hide ()
595610
596-
597- def eventFilter (self , source , event ):
598- if event .type () == QEvent .KeyPress : # Check if the event is a key press
599- if event .text () == "ñ" :
600- #print(f"Key pressed2: {event.text()}")
601- return True
602- #else:
603- # print(f"Key pressed: {event.text()}")
604- return super ().eventFilter (source , event )
605-
606-
607611 def code_from_slide (self , code ):
608612 self .text_edit .set_code (code )
609613 self .text_edit .set_mode (1 )
@@ -624,19 +628,8 @@ def load_program(self, filename):
624628
625629
626630 def execute_code (self ):
627- self .jupyter_widget ._control .setText ("" )
628- self .jupyter_widget ._control .setFocus ()
629- QApplication .processEvents ()
630-
631- def run ():
632- code = self .text_edit .toPlainText ()
633- if code .strip ():
634- self .jupyter_widget .execute (code , interactive = True )
635- if not self .keep_banner .isChecked ():
636- self .jupyter_widget ._control .clear ()
637-
638-
639- QTimer .singleShot (100 , run )
631+ self .jupyter_widget .execute ("%clear" )
632+ self .jupyter_widget .do_execute (self .text_edit .toPlainText (), True , False )
640633
641634if __name__ == "__main__" :
642635 app = QApplication (sys .argv )
0 commit comments