在此输入图像描述 我希望包裹部分的未着色部分缩进并对齐,因为每个字符大小不固定,我无法通过计算字符数来做到这一点,我需要重写tk中的which方法。
以下是当前相关代码,效果如图。
class re_Text():
def __init__(self, queue):
self.queue = queue
def write(self, content):
self.queue.append(content)
def flush(self):
pass
class GUI():
def __init__(self, root):
self.msg_queue = deque()
self.initGUI(root)
def show_msg(self):
save_queue = self.msg_queue
while self.msg_queue:
content = self.msg_queue.popleft()
self.text.config(state=NORMAL)
self.text.insert(tk.END, content)
c_t = re.findall(r'^\[\d{2}:\d{2}:\d{2}]', content)
if c_t: self.apply_tag('c', c_t[0])
self.text.config(state=DISABLED)
self.msg_queue = save_queue
self.text.see(END)
self.root.after(50, self.show_msg)
def initGUI(self, root):
self.root = root
self.scrollBar = tk.Scrollbar(self.root)
self.text = tk.Text(self.root, yscrollcommand=self.scrollBar.set, state=DISABLED, relief='flat', font=my_font_llt_8, fg='black', bg='#fcfcfc')
self.text.place(x=390, y=10, width=175, height=365)
self.scrollBar.config(command=self.text.yview)
self.text.bind('<1>', lambda e: 'break')
self.text.bind('<B1-Motion>', lambda e: 'break')
self.text.bind('<Shift-1>', lambda e: 'break')
self.text.tag_configure('c', foreground='#ff7f7f')
self.root.after(50, self.show_msg)
def delLastText(self):
self.msg_queue.pop()
self.msg_queue.pop()
def apply_tag(self, tag_name, search_string, replacement_string=None):
start_pos = '1.0'
while True:
start_pos = self.text.search(search_string, start_pos, stopindex=tk.END)
if not start_pos:
break
end_pos = self.text.index(start_pos + '+%dc' % len(search_string))
if replacement_string:
self.text.delete(start_pos, end_pos)
self.text.insert(start_pos, replacement_string)
self.text.tag_add(tag_name, start_pos, end_pos)
start_pos = end_pos
有一个 tag 选项
lmargin2
,它定义换行行(不包括第一行)的左侧缩进(边距)(以像素为单位):
self.text.tag_config('wrap-indent', lmargin2=78) # change 78 to whatever value you want
然后就可以在插入消息时指定标签了:
msg = '''\
[17:24:22] 程序初始化完成
[17:24:32] 信息已錄入
[17:24:32] 文件路徑: D:\\Desktop\\Desktop\\image\\128g.gif
[17:23:32] 已經分離出需處理的幀47幀
'''
self.text.insert('end', msg, 'wrap-indent')
输出: