2012-01-20 25 views
1

私はすべてを設定しましたが、Tkinterテキストウィジェットで2行を入れ替える方法が分かりません。それは無効にされ、他のウィジェットによって占められているので、私は、3つのボタンを使って障害/非フォーカスのテキストウィジェットにいくつかの機能を与えました。 Move_Up、Move_Down、およびDelete。私は削除作業をしていますが、他の2つを動作させる方法を理解することはできません。基本的にはTkinterテキストウィジェット内の行を入れ替えよう

def Move_Up(self): 
    self.TextWidg.config(state='normal') 
    #swap this line with the line above it 
    self.TextWidg.config(state='disabled') 

def Move_Down(self): 
    self.TextWidg.config(state='normal') 
    #swap this line with the line below it 
    self.TextWidg.config(state='disabled') 

def Delete(self): 
    self.TextWidg.config(state='normal') 
    #delete the line 
    self.TextWidg.delete(self.line_start,self.line_end) 
    #delete the carriage return 
    self.TextWidg.delete(self.line_start) 
    self.TextWidg.config(state='disabled') 

self.line_startself.line_end

そして、ここでは、私がこれまで持っているものです。今、私は、変更されようとしているテキストの行の先頭と末尾を参照する2つの値で働いていますどのようにしてself.line_startself.line_endの値を実装して、その行をその行の前の行またはその行と入れ替えることができますか。

答えて

1

indexメソッドを使用して、ウィジェット内の任意の位置のインデックスを取得できます。 linestartlineendのような修飾子を含む引数を与えることができます。また、+1cのような相対位置のインデックスを取得して次の文字のインデックスを取得するか、+1lを使用して次の行を取得することもできます。 wordstartwordendを使用することもできます。次の例のように、それらを組み合わせることができます。たとえばindex("insert lineend +1c")

を、(「挿入」は、挿入カーソルを表しマークの名前です)挿入カーソルを持ってラインの開始と終了を取得するには:

詳細については、text widget page on effbot.orgの「式」セクションを参照してください。

2

私はMove_Up()メソッドとMove_Down()メソッドを以下のように解決できました。注それは、テキストMove_Up()の一行だけが存在する場合、その行にそのテキストを追加すること:それは、Mac OS X上

#swap this line with the line above it 
def Move_Up(): 
    text.config(state='normal') 
    # get text on current and previous lines 
    lineText = text.get("insert linestart", "insert lineend") 
    prevLineText = text.get("insert linestart -1 line", "insert -1 line lineend") 

    # delete the old lines 
    text.delete("insert linestart -1 line", "insert -1 line lineend") 
    text.delete("insert linestart", "insert lineend") 

    # insert lines in swapped order 
    text.insert("insert linestart -1 line", lineText) 
    text.insert("insert linestart", prevLineText) 
    #text.config(state='disabled') 


#swap this line with the line below it 
def Move_Down(): 
    text.config(state='normal') 
    # get text on current and next lines 
    lineText = text.get("insert linestart", "insert lineend") 
    nextLineText = text.get("insert +1 line linestart", "insert +1 line lineend") 

    # delete text on current and next lines 
    text.delete("insert linestart", "insert lineend") 
    text.delete("insert +1 line linestart", "insert +1 line lineend") 

    # insert text in swapped order 
    text.insert("insert linestart", nextLineText) 
    text.insert("insert linestart + 1 line", lineText) 
    #text.config(state='disabled') 

EDITをPythonの3.1.3または2.6.6を使用して動作します。 Move_Down()は、1行しかない場合は何も行いません。

+0

あなたはMove_Upで行の重複を避けるために使用することができます以下 'POS = text.indexを( "挿入") ( "")pos.split場合は[0] == '1': リターン ' – Eruvanos

関連する問題