2016-09-20 10 views
0

私はtkinter-pythonでアプリケーションのようなメモ帳を構築しています。アプリケーションのテキストフィールドに書かれたテキストのフォントを変更するオプションがあります。tkinter tag_configが動作しません

基本的にFontChooserクラスオブジェクトを作成してメインウィンドウに渡し、フォントをManウィンドウに設定する 'font'メニューをクリックすると、メインウィンドウから呼び出されるFont Chooserポップアップ画面が作成されました。私が最初にアプリケーションを実行し、テキストの一部を選択し、フォントを変更するとき

フォントがあるメインウィンドウで設定取得されたコードのサンプル、

root = Tix.Tk(className="Notepad") 
notepad = ScrolledText(root, width=100, height=100) 

def open_font(): 
    font = MyFont.askChooseFont(root) 
    notepad.tag_add("bt", "sel.first", "sel.last") 
    notepad.tag_config("bt", font=font.getFontTuple()) 

は今、それが正常に動作します。しかしその後、私が選択しているフォントのどの部分を変更してフォントを変更するにしても、選択を無視し、テキスト全体にフォントを適用しています。誰でも私にここで何が問題なのかを教えてもらえますか?

答えて

0

idleはtag_configを使用してカラーPythonコードを構文解析し、過去15年間のすべてのPythonバージョンと主要OSで動作します。

なぜ失敗するのかを知るには、失敗したMCVEが必要です。チックスとスクロールバーを使わずに始める。 (Tixは3.6では推奨されておらず、バグは修正されていません)また、コードは各選択に同じタグを使用しているので、設定を変更すると以前のすべての選択に適用されます。

これは、意図したとおりに動作するように単純化されたコードです。

import tkinter as tk 
import time 
root = tk.Tk() 
text = tk.Text(root) 
text.pack() 
text.insert('1.0', "line 1\nline 2\nline 3\n") 
text.tag_add('bg', '1.0', '1.4') 
text.tag_config('bg', background='red') 
root.update() 
time.sleep(1) 
text.tag_add('bg', '2.0', '2.4') 
text.tag_config('bg', background='blue') 
root.update() 

問題を再現するか、必要なものが得られるまで段階的に修正してみることができます。

例を変更してEDIT:ハードコードされたインデックスの代わりに 'sel.first'と 'sel.last'を使用します。

import tkinter as tk 
import time 
root = tk.Tk() 
text = tk.Text(root) 
text.pack() 
text.insert('1.0', "line 1\nline 2\nline 3\n") 
root.update() # make text visible for selection 
input('select some text') 
text.tag_add('bg', 'sel.first', 'sel.last') 
text.tag_config('bg', background='red') 
root.update() # make change visible 
input('select some text') 
text.tag_add('bg', 'sel.first', 'sel.last') 
text.tag_config('bg', background='blue') 
root.update() # make 2nd change visible 
input('look at result') 

コンソールで実行します。コンソールとGUIの両方が見えるようにtkウィンドウを移動する。指示に従って選択を行います。コンソール*をクリックし、returnキーを押すと入力文が返されます。繰り返す。私の結果は、両方の選択肢が、すべてではなく、青色に変わるということです。私は次の実験のためにbgの色の代わりにフォントを変更することをお勧めします。 Windowsでは

  • Windowsは一度に1つのウィンドウで表示を選択できますので、1コンソールをクリックすると、TKウィンドウでハイライト表示の選択が消えます。しかし、選択マーカーはまだテキストウィジェットに存在しているので、tag_addは引き続き動作します。
+0

ここでは、タグ範囲を1.0〜1.4にハードコーディングしています。問題は、 'sel.first'と 'sel.last'として定義された範囲であるようです。どういうわけか、最初のパスの後、2回目のパスから、この選択は実際に選択したテキストではありません。代わりにTextAreaのテキスト全体を考慮しています。 – SubhasisM

+0

「何かになっているようだ」というのは、問題はしばしば問題ではないということです。だから私はあなたが最小限の変更実験をすることを提案しました。何が問題なのかを知るためです。私の提案をもう一度読んでください。私はハードコーディングされたインデックスを選択されたインデックスに変更する実験を行いました。後者はそれ自体では問題ではありません。次の実験(色ではなくフォントの変更)を続ける必要があります。 –

関連する問題