2011-08-16 10 views
0

私はwxpythonで簡単なテキストエディタを作っています。私はPythonのようなコードを編集できるようにしたいと思います。そのため、IDLEやNotepad ++と同様の方法でテキストを強調表示したいと思います。どのように私はそれを強調するだろう知っているが、私はそれを実行するための最良の方法が欲しい。私はそれが可能かどうかわからないが、私が本当に好きなのは、キーが押されるたびに実行され、押されているかどうかをチェックするループではなく、処理を節約することである。textctrlが変更されたときにwxpythonが実行される

import wx 
class MainWindow(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title=title, size=(500,600)) 
     style = wx.TE_MULTILINE|wx.BORDER_SUNKEN|wx.TE_RICH2 
     self.status_area = wx.TextCtrl(self, -1, 
            pos=(10, 270),style=style, 
            size=(380,150)) 
     self.status_area.AppendText("Type in your wonderfull code here.") 
     fg = wx.Colour(200,80,100) 
     at = wx.TextAttr(fg) 
     self.status_area.SetStyle(3, 5, at) 
     self.CreateStatusBar() # A Statusbar in the bottom of the window 

     # Setting up the menu. 
     filemenu= wx.Menu() 

     filemenu.Append(wx.ID_ABOUT, "&About","Use to edit python code") 
     filemenu.AppendSeparator() 
     filemenu.Append(wx.ID_EXIT,"&Exit"," Terminate the program") 

     # Creating the menubar. 
     menuBar = wx.MenuBar() 
     menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar 
     self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content. 
     self.Show(True) 


app = wx.App(False) 
frame = MainWindow(None, "Python Coder") 
app.MainLoop() 

ループはwhileループで、そのループ作るための最良の方法だろう何が必要な場合、または

def Loop(): 
    <code> 
    Loop() 

追加バインドと私の新しいコード:

import wx 

class MainWindow(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title=title, size=(500,600)) 
     style = wx.TE_MULTILINE|wx.BORDER_SUNKEN|wx.TE_RICH2 
     self.status_area = wx.TextCtrl(self, -1, 
            pos=(10, 270),style=style, 
            size=(380,150)) 
     #settup the syntax highlighting to run on a key press 
     self.Bind(wx.EVT_CHAR, self.onKeyPress, self.status_area) 
     self.status_area.AppendText("Type in your wonderfull code here.") 
     fg = wx.Colour(200,80,100) 
     at = wx.TextAttr(fg) 
     self.status_area.SetStyle(3, 5, at) 
     self.CreateStatusBar() # A Statusbar in the bottom of the window 

     # Setting up the menu. 
     filemenu= wx.Menu() 

     filemenu.Append(wx.ID_ABOUT, "&About","Use to edit python code") 
     filemenu.AppendSeparator() 
     filemenu.Append(wx.ID_EXIT,"&Exit"," Terminate the program") 

     # Creating the menubar. 
     menuBar = wx.MenuBar() 
     menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar 
     self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content. 
     self.Show(True) 


    def onKeyPress (self, event): 
     print "KEY PRESSED" 
     kc = event.GetKeyCode() 
     if kc == WXK_SPACE or kc == WXK_RETURN: 
      Line = self.status_area.GetValue() 
      print Line 
app = wx.App(False) 
frame = MainWindow(None, "Python Coder") 
app.MainLoop() 
+0

キーを押したときに実行したいのは何ですか?ハイライトは? – arunkumar

+0

文字列内のキーワードを強調表示して、Pythonコードを強調表示します。したがって、「もし」が紫色のテキストであり、異なる機能も着色される。私は自分のコードに単語が入力された場合にテキストを強調表示させる方法を知っています。textctrlのテキストが変更された場合は、コードのブロックを実行します。だから私がウィンドウのテキストボックスに「リンゴが好き」と入力して「私はアップルパイが好き」と変更しました。「パイ」のキーを押すたびに4回コードブロックが実行されます。 – drfrev

+0

これを減らすには、スペースバーまたはエンターキーが押されたときにのみ強調表示コードを実行するのが良いでしょう。これは、単語または行が完全であることを示します。 – arunkumar

答えて

0

メインウィンドウ__init__にこの機能を追加する

self.Bind(wx.EVT_CHAR, self.onKeyPress, self.status_area) 

はその後、そういえばメインウィンドウ

def onKeyPress (self, event): 
    kc = event.GetKeyCode() 
    if kc == WXK_SPACE or kc == WXK_RETURN: 
     #Run your highlighting code here 

にonKeyPressイベント定義、これはコードの強調表示を行うための最も効率的な方法ではないかもしれません。これを見てみましょう。しかし、その間にあなたはこれを試すことができます。

編集: これを見てください - StyledTextCtrl私はあなたが必要とするもののラインに沿ってもっと考えています。

+0

私はあなたが私に与えたことを試しましたが、私がそれをデバッグしていたとき、何もすることができませんでした。 – drfrev

+0

StyledTextCtrlを試してみませんか? – arunkumar

+0

私はテキストを色付けする方法を知っていますが、キーボード上のキーが押されたときに実行する必要があります。それはコードのように見えますが、強調表示するコードを#Runして "print"ここに入力したときには決して印刷されませんでした。私がやっていることについては、styledTextCtrlはあまりにも複雑すぎます。 – drfrev

関連する問題