2017-12-01 21 views
2

3つのメッセージが挿入されたテキストボックスウィジェットがあります。 1つは開始メッセージ、1つは終了メッセージ、もう1つは「ユニット」が破壊されたときに警告するメッセージです。開始メッセージと終了メッセージを黒色にしたいが、無効メッセージ(コード内でコメントした箇所を参照)をにすると、ウィジェットに挿入すると赤くなる。tkinterウィジェットに自動的に挿入されるテキストの色を変更する

私はこれを行うにはどうすればいいのか正確にはわかりません。私はHow to change the color of certain words in the tkinter text widget?を見ましたが、これは動作しますが、のテキストをマウスで選択した場合はテキストのプロパティのみが変更されますが、のテキストは自動的にに挿入されます。

正しい方向に私を指すための提案はありますか?私は比較的新しいTkinterです。私はPython 3.6を使用しています。

import tkinter as tk 
import random 

class SimulationWindow(): 

    def __init__(self, master): 

     #Initialise Simulation Window 
     self.master = master 
     self.master.geometry('1024x768') #w,h 

     #Initialise Mainframe 
     self.mainframe() 

    def mainframe(self): 

     #Initialise Frame 
     self.frame = tk.Frame(self.master) 
     self.frame.grid_columnconfigure(0, minsize = 100) 
     self.frame.grid(row = 1, sticky = 'w') 

     self.txtb_output = tk.Text(self.frame) 
     self.txtb_output.config(width = 115, height = 30, wrap = tk.WORD) 
     self.txtb_output.grid(row = 1, column = 0, columnspan = 3, padx = 50) 

     btn_start = tk.Button(self.frame) 
     btn_start.config(text = 'Start', borderwidth = 2, padx = 2, height = 2, width = 20) 
     btn_start.bind('<Button-1>', self.start) 
     btn_start.grid(row = 2, column = 1, padx = (0,65), pady = 20) 


    def battle(self): 
     if len(self.units) == 0: 
      self.txtb_output.insert(tk.END, 'The battle has ended.\n') 
     else: 
      try: 
       destroyed = random.randint(0,4) 
       #I want the text here to be red 
       self.txtb_output.insert(tk.END, 'The unit ' + self.units[destroyed] + ' has been destroyed.\n') 
       self.units.remove(self.units[destroyed]) 
       self.frame.after(5000, self.battle) 
      except: 
       self.battle() 

    def start(self, event): 
     self.units = ['battle droid', 'battle droid', 'droid tank', 'super battle droid', 'battle droid'] 
     self.txtb_output.insert(0.0, 'The battle has begun.\n') 
     self.battle() 

def main(): 
    root = tk.Tk() 
    main_window = SimulationWindow(root) 
    root.mainloop() 

main() 
+1

[挿入()](http://effbot.org/tkinterbook/text.htm#Tkinter.Text.insert-method)は、オプション 'tags'を持っています新しいテキストを挿入します。そしてこのタグに色を割り当てる必要があります。すべてのアラートに同じタグを使用することができ、色を1回だけ割り当てる必要があります。 – furas

+0

あまり関係のないコードを投稿しました。 [mcve]はおそらく、この質問に対して十数行程度しかかかりません。 –

答えて

5

insert()は、テキストを挿入するオプションtagsので、あなたがASSINGできるタグ(または多くのタグ)を持っています。

そして、このタグにのみ色を割り当てる必要があります。あなたは時にタグを割り当てることができるように

import tkinter as tk 

root = tk.Tk() 

txt = tk.Text(root) 
txt.pack() 

txt.tag_config('warning', background="yellow", foreground="red") 

txt.insert('end', "Hello\n") 
txt.insert('end', "Alert #1\n", 'warning') 
txt.insert('end', "World\n") 
txt.insert('end', "Alert #2\n", 'warning') 

root.mainloop() 

enter image description here

+0

ありがとうございます!完璧に働いた – Arbiter

関連する問題