gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:15:53 27 4
gpt4 key购买 nike

我有一个文本框小部件,其中插入了三个消息。一条是开始消息,一条是结束消息,一条是当“单位”被摧毁时发出警报的消息。我希望开始和结束消息为黑色,但销毁消息(请参阅我在代码中注释的位置)在插入小部件时显示为红色

我不太确定该怎么做。我看了一下 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()

最佳答案

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()

enter image description here

关于python - 更改自动插入到 tkinter 小部件中的文本的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47591967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com