简体   繁体   English

更改自动插入到 tkinter 小部件中的文本颜色

[英]Changing the colour of text automatically inserted into tkinter widget

I have a text box widget that has three messages inserted into it.我有一个文本框小部件,其中插入了三个消息。 One is a start message, one an ending message, and one a message to alert when a 'unit' has been destroyed.一个是开始消息,一个是结束消息,一个是在“单位”被摧毁时发出警报的消息。 I want the starting and ending messages to be black, but the destoyed messages (see where I have commented in the code) to be coloured red when inserted into the widget .我希望开始和结束的消息是黑色的,但是当插入小部件时,销毁的消息(请参阅我在代码中注释的位置)为红色

I'm not exactly sure how to go about doing this.我不完全确定如何去做这件事。 I took a look at How to change the color of certain words in the tkinter text widget?我查看了如何更改 tkinter 文本小部件中某些单词的颜色? and this would work, however it only changes the text properties if the text is selected using the mouse , whereas I want my text to be inserted in that colour automatically .这会起作用,但是如果使用鼠标选择文本,它只会更改文本属性,而我希望我的文本自动以该颜色插入

Any suggestions to point me in the right direction?有什么建议可以为我指明正确的方向吗? I relatively new to Tkinter .我对Tkinter比较Tkinter I'm using Python 3.6.我正在使用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() has option tags so you can assign tag (or many tags) when you insert text. insert()具有选项tags因此您可以在插入文本时分配标签(或多个标签)。

And then you have to only assign color to this tag.然后你只需要为这个标签分配颜色。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM