tkinter实现界面显示

‘’’’’’
def AFLogAnalysisShow(self,keyword,content):
print(“keyword:%s”%keyword)
ShowLogWin = tk.Tk()
ShowLogWin.title(“Show Logs”)
ShowLogWin.geometry(“1000x600”)

winMainFrame = tk.Frame(ShowLogWin)
winMainFrame.pack(side=tk.LEFT,fill=tk.Y)

winYScroll = tk.Scrollbar(winMainFrame)
winYScroll.pack(side=tk.RIGHT,fill=tk.Y)
winXScroll = tk.Scrollbar(winMainFrame,orient=tk.HORIZONTAL)
winXScroll.pack(side=tk.BOTTOM,fill=tk.X)

winText = tk.Text(winMainFrame, width=800, height=600,xscrollcommand=winXScroll.set,yscrollcommand=winYScroll.set)

winXScroll.config(command=winText.xview)
winYScroll.config(command=winText.yview)

winText.pack(expand=tk.YES,side=tk.TOP, fill=tk.Y)
winText.tag_config("tag1",background="yellow")
winText.insert('insert', content)

ShowLogWin.mainloop()

路过的各位大咖们,小弟想实现:在 text 窗口中显示 content 内容,并且高亮显示 keyword,但按照上面的代码执行结果,水平滚动条无法显示,并且没能实现高亮显示功能,还望各位大咖指教,感谢!

Python

讨论数量: 5
Jason990420

你的代码执行结果,不管是垂直或水平的滚动条,应该都有显示的.

如果你是指水平滚动条无法滚动,那是因为 TEXT 窗口的内容如果太长就会被自动移到下一行,所以右边没有内容,也就不能往右滚动.

如果不想自动移到下一行,在 TEXT 的参数中加上 wrap=tk.NONE 就可以了.

还有在 TEXT 的参数 width=800 以及 height=600, 你可能把它们的单位视为点素,应该是字寛及行数.

你有设定了 tag1 为背景黄色,但是在插入字符串时,没有指定 *tags, 所以才没有高亮显示.

winText.insert('insert', content, "tag1")

如果要把内容中,特定的字符串高亮,简单的搜索可以字符串直接标示,复杂的必须使用 Tcl 的正则式来表示。注意,在此的代码是针对全部的内容,不是插入新的内容,因此 Widget 内容每次更新,必须重新调用一次,内容越多,速度越慢.

你可以撰写新的函数,针对新插入的内容来处理,这样就比较不会影响到速度,不过新旧内文拼接的部份,就不会被考虑是被要求要高亮的内容.

以下代码未经完全验证,如有错误请自行更正 …

def highlight_pattern(widget, pattern, tag='Highlight', options={"background":"yellow"}, regexp=True):

    widget.tag_delete(tag)
    widget.tag_config(tag, **options)
    start   = widget.index("1.0")
    stop    = widget.index("end")
    count   = tk.IntVar()   # Get the length of match
    while True:
        index = widget.search(pattern, start, stop, count=count)
        if not index:
            break
        length = count.get()
        if length == 0:
            break
        widget.tag_add(tag, index, "%s+%sc" % (index, length))
        start = "%s+%sc" % (index, length)

...

content = """af_mgr_v3: Acce preTS (90669467455275) TS (90669507175643) Info ( 9 967 48)/Gyro preTS ( 0) TS ( 0) Info ( 0 0 0)/ Gyro VectorValue ( 0) 151 D Hal3ARaw_thread: [onAFThreadLoop] sttNum (#0) FV (2058435) DAC (345) Gyro (0, 0, 0) ROI (0,1,1640,1140,2360) 12-24 15:37:56.057978 31577 31784 D ae_mgr : Gyro InValid!\n"""
winText.insert('insert', content)
winText.insert('insert', content)
highlight_pattern(winText, 'Gyro', regexp=False)

Python

3年前 评论

@Jason990420 非常感谢,在 text 的参数中加上 wrap=tk.NONE 确实是可以实现水平滚动条效果了,但高亮显示可能您没理解我的意思,例如下面这段内容中: af_mgr_v3: Acce preTS (90669467455275) TS (90669507175643) Info ( 9 967 48)/Gyro preTS ( 0) TS ( 0) Info ( 0 0 0)/ Gyro VectorValue ( 0) 151 D Hal3ARaw_thread: [onAFThreadLoop] sttNum (#0) FV (2058435) DAC (345) Gyro (0, 0, 0) ROI (0,1,1640,1140,2360) 12-24 15:37:56.057978 31577 31784 D ae_mgr : Gyro InValid! 我希望实现的是:所有的 Gyro 都能高亮显示,其他字符普通显示即可,不知道这个功能是否可以实现,感谢!

3年前 评论
Jason990420 3年前
Jason990420

没任何回应,也没打钩?这个问题解决了吗?

3年前 评论

谢谢,此问题已经解决,感谢!

3年前 评论