[英]Changing the colour of text automatically inserted into tkinter widget
我有一個文本框小部件,其中插入了三個消息。 一個是開始消息,一個是結束消息,一個是在“單位”被摧毀時發出警報的消息。 我希望開始和結束的消息是黑色的,但是當插入小部件時,銷毀的消息(請參閱我在代碼中注釋的位置)為紅色。
我不完全確定如何去做這件事。 我查看了如何更改 tkinter 文本小部件中某些單詞的顏色? 這會起作用,但是如果使用鼠標選擇文本,它只會更改文本屬性,而我希望我的文本自動以該顏色插入。
有什么建議可以為我指明正確的方向嗎? 我對Tkinter
比較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()
insert()
具有選項tags
因此您可以在插入文本時分配標簽(或多個標簽)。
然后你只需要為這個標簽分配顏色。
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.