2012-01-20 35 views
1

我已經設置好了所有東西,我只是無法弄清楚如何在Tkinter文本小部件中交換2行。它被禁用和其他小部件填充,所以我給殘疾人/不專心的文本小部件一些功能與3個按鈕; Move_Up,Move_Down和Delete。我已刪除工作,但無法弄清楚如何讓其他兩個工作。現在,我與引用的開始和文本,它會行尾2倍的值工作進行修改:self.line_startself.line_end在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的值,以便將行與之前的行或行之後的行進行交換。

回答

1

您可以使用index方法獲取窗口小部件中任何位置的索引。您可以給它一個包含修飾符的參數,例如linestartlineend。你也可以通過+1c之類的東西獲得相對位置的索引來得到下一個字符的索引,或者+1l來獲得下一行。您也可以使用wordstartwordend。你可以將它們組合起來,例如:index("insert lineend +1c")

例如,爲了得到啓動和具有插入光標行尾(其中「插入」是代表插入光標標記的名稱):

start = self.TextWidg("insert linestart") 
end = self.TextWidg("insert lineend") 

欲瞭解更多信息,請參閱text widget page on effbot.org上標題爲「表達式」的部分。

2

按照Bryan的建議,我能夠解決Move_Up()和Move_Down()方法,如下所示。它的工作原理使用Python 3.1.3或2.6.6在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') 

編輯:需要注意的是,如果只有一個行文本Move_Up()的會追加文本到該行。如果只有一行,則Move_Down()不執行任何操作。

+0

可以使用以下,以避免在Move_Up行重複: 'POS = text.index( 「插入」) 如果pos.split( 「」)[0] == '1': 返回 ' – Eruvanos

相關問題