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

 

posted @ 2020-12-08 15:14  南风丶轻语  阅读(4701)  评论(0编辑  收藏  举报