Python tkinter之Text
1、Text的基本属性
# -*- encoding=utf-8 -*- import tkinter from tkinter import * if __name__ == '__main__': win = tkinter.Tk() # 窗口 win.title('南风丶轻语') # 标题 screenwidth = win.winfo_screenwidth() # 屏幕宽度 screenheight = win.winfo_screenheight() # 屏幕高度 width = 500 height = 300 x = int((screenwidth - width) / 2) y = int((screenheight - height) / 2) win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 大小以及位置 text = Text( master=win, # 父容器 bg='pink', # 背景颜色 fg='red', # 文本颜色 relief='sunken', # 边框的3D样式 flat、sunken、raised、groove、ridge、solid。 bd=3, # 边框的大小 height=3, # 高度 width=20, # 宽度 padx=1, # 内间距,字体与边框的X距离 pady=1, # 内间距,字体与边框的Y距离 state='normal', # 设置状态 normal、active、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('黑体', 20), # 字体 wrap='char', # 字数够width后是否换行 char, none, word ) text.pack() win.mainloop()
备注:
①支持的字体(通过tkinter.font.families获取)https://www.cnblogs.com/rainbow-tan/p/14043822.html/
②鼠标样式选项
"arrow", "circle", "clock", "cross", "dotbox", "exchange", "fleur", "heart", "man", "mouse", "pirate", "plus","shuttle", "sizing", "spider", "spraycan", "star","target", "tcross", "trek", "watch"
③边框样式,组件状态阅览
2、插入字符串和获取信息
# -*- encoding=utf-8 -*-
import tkinter
from tkinter import *
def end_insert():
text.insert('end', 'A') # 插入到末尾
def point_insert():
text.insert('insert', 'B') # 插入到光标处
def insert_x_y():
# 插入指定位置(x.y),1.0表示1行1列,1.2表示1行3列,行x从1开始,列y从0开始
# 如果x.y之前没内容,则添加到前面
text.insert(1.2, 'C')
def get():
# 获取输入的信息(x.y),1.0表示1行1列,1.2表示1行3列,行x从1开始,列y从0开始
msg = text.get(1.0, 1.6) # 获取1行1列至1行7列
print('1行1列至1行7列:{}'.format(msg))
msg = text.get(1.0, '1.end') # 获取1行1列至1行末尾
print('1行1列至1行末尾:{}'.format(msg))
msg = text.get(1.4, '2.end') # 获取1行5列至2行末尾
print('获取1行5列至2行末尾:{}'.format(msg))
msg = text.get(1.2, 'end') # 获取1行3列至内容结尾
print('获取1行3列至内容结尾:{}'.format(msg))
def delete():
text.delete(1.0, 1.6) # 删除1行1列至1行7列
text.delete(1.0, '1.end') # 删除1行1列至1行末尾
text.delete(1.4, '2.end') # 删除1行5列至2行末尾
text.delete(1.2, 'end') # 删除1行3列至内容结尾
if __name__ == '__main__':
win = tkinter.Tk() # 窗口
win.title('南风丶轻语') # 标题
screenwidth = win.winfo_screenwidth() # 屏幕宽度
screenheight = win.winfo_screenheight() # 屏幕高度
width = 500
height = 300
x = int((screenwidth - width) / 2)
y = int((screenheight - height) / 2)
win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 大小以及位置
text = Text(
master=win, # 父容器
bg='pink', # 背景颜色
fg='red', # 文本颜色
relief='sunken', # 边框的3D样式 flat、sunken、raised、groove、ridge、solid。
bd=3, # 边框的大小
width=5, # 宽度
height=5, # 高度
state='normal', # 设置状态 normal、readonly、 disabled
cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus...
font=('黑体', 20), # 字体
wrap='char', # 字数够width后是否换行 char, none, word
)
text.pack()
Button(text='插入到末尾', command=end_insert).pack()
Button(text='插入到鼠标位置', command=point_insert).pack()
Button(text='插入到几行几列', command=insert_x_y).pack()
Button(text='获取输入的信息', command=get).pack()
Button(text='删除', command=delete).pack()
win.mainloop()
3、添加滚动条
# -*- encoding=utf-8 -*- import tkinter from tkinter import * if __name__ == '__main__': win = tkinter.Tk() # 窗口 win.title('南风丶轻语') # 标题 screenwidth = win.winfo_screenwidth() # 屏幕宽度 screenheight = win.winfo_screenheight() # 屏幕高度 width = 800 height = 600 x = int((screenwidth - width) / 2) y = int((screenheight - height) / 2) win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 大小以及位置 frame = Frame(win) frame.pack() s_y = Scrollbar(frame, ) s_y.pack(side=RIGHT, fill=Y) s_x = Scrollbar(frame, orient=HORIZONTAL) s_x.pack(side=BOTTOM, fill=X) text = Text( master=frame, # 父容器 bg='pink', # 背景颜色 fg='red', # 文本颜色 relief='sunken', # 边框的3D样式 flat、sunken、raised、groove、ridge、solid。 bd=3, # 边框的大小 height=3, # 高度 width=10, # 宽度 padx=1, # 内间距,字体与边框的X距离 pady=1, # 内间距,字体与边框的Y距离 state='normal', # 设置状态 normal、active、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('黑体', 20), # 字体 wrap='none', # 字数够width后是否换行 char, none, word yscrollcommand=s_y.set, # 滚动条 xscrollcommand=s_x.set, # 滚动条 ) s_y.config(command=text.yview) s_x.config(command=text.xview) text.pack() win.mainloop()
备注:
①添加水平滚动条时需要保证wrap='none', 让字体不自动换行
4、插入组件和图片
# -*- encoding=utf-8 -*- import threading import time import tkinter from tkinter import * from PIL import Image from PIL import ImageTk def add_btn(): btn = Button(text='按钮', relief='g', width=20) text.window_create(INSERT, window=btn) # 鼠标处插入 text.update() # 更新 # text.window_create(1.2,window=btn)#1行3列插入 # text.update() def delete(): time.sleep(5) btn.destroy() # 销毁 thread = threading.Thread(target=delete) thread.start() def add_image(): # 图片需要为全局变量 text.image_create(INSERT, image=img) text.update() if __name__ == '__main__': win = tkinter.Tk() # 窗口 win.title('南风丶轻语') # 标题 screenwidth = win.winfo_screenwidth() # 屏幕宽度 screenheight = win.winfo_screenheight() # 屏幕高度 width = 500 height = 300 x = int((screenwidth - width) / 2) y = int((screenheight - height) / 2) win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 大小以及位置 img = ImageTk.PhotoImage(Image.open('19.png')) text = Text( master=win, # 父容器 bg='pink', # 背景颜色 fg='red', # 文本颜色 relief='groove', # 边框的3D样式 flat、sunken、raised、groove、ridge、solid。 bd=3, # 边框的大小 height=3, # 高度 width=20, # 宽度 padx=1, # 内间距,字体与边框的X距离 pady=1, # 内间距,字体与边框的Y距离 state='normal', # 设置状态 normal、active、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('黑体', 20), # 字体 wrap='char', # 字数够width后是否换行 char, none, word ) text.pack() Button(text='添加按钮', command=add_btn).pack() Button(text='添加图片', command=add_image).pack() win.mainloop()
备注:
①删除组件用组件.destroy()即可