测试代码如下:
import tkinter as tk
win=tk.Tk()
win.geometry('600x400')
win.title('test')
tk.Label(win, text='日志', bd=3, relief='groove', width=30).grid(row=10, column=0, columnspan=50,pady=10)
print_log = tk.Text(win, width=80, height=22, bd=3)
print_log.grid(row=11, column=0,rowspan=5,columnspan=50,padx=5)
bar = tk.Scrollbar(win, orient=tk.VERTICAL)
bar.grid(row=11, column=80, rowspan=12, sticky='N' + 'S') # N,S,W,E 表示 上,下,左,右
bar.config(command=print_log.yview) # 指定回调函数是Scrollbar的yview
print_log.config(yscrollcommand=bar.set) # 指定与滚动条的回调函数
print_log.bind('<KeyRelease>', self.limit_print) # 任意键盘按键松开
print_log.bind('<ButtonRelease-1>', self.limit_print_2) #鼠标左键松开
'''--------------限制日志框输入内容--------------'''
#任意按键松开时光标所在行移动到最后一行,且不可输入
def limit_print(num):
i=self.print_log.get('end-1c linestart') #获取最后一行开头
#print('test',i)
print_log.mark_set('insert', 'end-1c linestart') #移动光标到最后一行
#限制字母、数字、中文字符与特殊符号
if str(i).isalnum()==True or str(i).isalnum()==False or ('\u4e00' <= str(i) <= '\u9fa5')==True and i!='':
print_log.delete('end-1c linestart','end-1c lineend')
#鼠标左键松开时光标移动到最后一行
def limit_print_2(num):
print_log.mark_set('insert', 'end-1c linestart') #移动光标到最后一行
win.mainloop()