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()
[挿入()](http://effbot.org/tkinterbook/text.htm#Tkinter.Text.insert-method)は、オプション 'tags'を持っています新しいテキストを挿入します。そしてこのタグに色を割り当てる必要があります。すべてのアラートに同じタグを使用することができ、色を1回だけ割り当てる必要があります。 – furas
あまり関係のないコードを投稿しました。 [mcve]はおそらく、この質問に対して十数行程度しかかかりません。 –