2017-05-18 8 views
3

は、私たちは、次のコードを考えてみましょう:Tkinter.Textのインデックス式とUnicode

from tkinter import Tk, Text 

root = Tk() 

text = Text(root) 

text.insert("end", "abcdefgh\nабвгґдеє\n一伊依医咿噫欹泆") 

print(text.index("1.4+1l"), text.index("1.4+2l")) 
print(text.index("3.4-1l"), text.index("3.4-2l")) 

+1l-1lが列を維持することになっているため、一部の人々(例えば、私にとっては)それは2.4 3.42.4 1.4を、印刷することを期待しますその行が十分に長い場合。代わりに、2.2 3.22.6 1.8を出力します。各文字をエンコードするのに必要なバイト数に依存するようです。

このようにする必要がありますか?それはどこかに文書化されていますか?私は列が保存されて心配している場合、私はちょうど

line, column = old_index.split(".") 
new_index = text.index(f"{line+1}.{column}") 

代わりの +1lのようなものを使用する必要がありますか?

+1

結果を複製することはできますが、説明することはできません。基礎となるtkライブラリにはバグがあるようです。 –

+0

@ブライアン・オークリー確かに、私は純粋なTkでそれを再現できます – zabolekar

答えて

1

問題は、Python関連のない、TK-関連すると思わ:

package require Tk 8.6 

pack [text .t] 
.t insert end "abcdefgh\nабвгґдеє\n一伊依医咿噫欹泆" 

puts "[.t index 1.4+1l] [.t index 1.4+2l]" 
puts "[.t index 3.4-1l] [.t index 3.4-2l]" 

exit 0 

出力:

2.2 3.2 
2.6 1.8 

だから私はsecond questionを尋ねました。