ویجت text مانند entry به کاربر اجازه می دهد که متن مورد نظرش را در آن وارد کند. تفاوت text با entry در این است که می توان متن های چند خطی و طولانی تر را در آن وارد کرد. همچنین امکان نمایش لینک و عکس هم در این ویجت وجود دارد.

در ابتدا قصد داریم برنامه ای بنویسیم که یک کادر متن دارد که مقادیری را از قبل در آن نوشته ایم. در پایین پنجره اصلی دو دکمه داریم که یکی کادر متن را پاک می کند و دیگری هر چه در کادر متن نوشته شده است را در یک لیبل نمایش می دهد.

import tkinter as tk
from tkinter import *
root = tk.Tk()
root.geometry('300x300')
root.resizable(False, False)
root.title('Text karakit')
def transfer():
    mytext = txt.get('1.0','end')
    lbl.config(text=mytext)
def clear():
    txt.delete('1.0','end')
    transfer()
txt = Text(root) 
txt.place(height=100,width=260,x=20,y=20)
txt.insert(INSERT, "Hello world")
txt.insert(END, " From karakit")  
txt_content = txt.get('1.0','end')
lbl=Label(root, relief="groove")
lbl.place(height=100,width=260,x=20,y=130)
btnClear=tk.Button(root, text="Clear", command=clear)
btnClear.place(height=30,width=50,x=50,y=250)
btnTransfer=tk.Button(root, text="Write", command=transfer)
btnTransfer.place(height=30,width=50,x=200,y=250)
root.mainloop()

توضیح برنامه:

طبق معمول در خطوط 1 تا 6 کتابخانه tkinter را احضار و پنجره اصلی را ایجاد می کنیم. سپس دو تابع به نام Transfer و clear  تعریف شده که بعدا به توضیح آنها خواهیم پرداخت.

در خط 13 یک ویجت text با نام txt ایجاد کرده ایم و در خط بعد آن را با ابعاد دلخواه در مکان دلخواه قرار می دهیم.

برای اینکه متنی را در کادر آن نمایش دهیم از دستور insert استفاده می کنیم. ابتدا از ابتدای خط اول  جمله Hello World! را می نویسیم. در انتهای این عبارت این کاراکترها اضافه شده اند: \n

این کاراکترها باعث می شوند متنهای بعدی از خط دوم شروع شوند.

در خط 16 هم عبارت From karakit را به انتهای متن اضافه می کنیم.

برای اینکه محتوای داخل کادر را ذخیره کنیم در خط 17 متغیر txt_content را تعریف می کنیم و با دستور get از اولین کاراکتر  خط اول تا انتهای متن را در این متغیر می ریزیم.

در خط 18 و 19 یک لیبل ایجاد و ابعاد و مکان آن را مشخص می کنیم.

در خط 20 یک دکمه به نام btnClear تعریف شده که قرار است کاربر با کلیک کردن آن بتواند متن کادر txt را پاک کند.

در خط 22 و 23 دکمه btnTransfer را تعریف و جانمایی کرده ایم. تابعی که به این دکمه اختصاص داده شده transfer است که در خط 7 تا 9 تعریف شده است. در این تابع ابتدا با دستور get محتوای متنی ویجت txt در متغیر mytext ذخیره می شود و در خط بعد این متغیر به متن لیبل lbl منتقل می گردد.

بنابراین کاربر با کلیک روی این دکمه می تواند متن داخل txt را در لیبل نمایش دهد.

تابعی که به دکمه btnClear اختصاص داده ایم clear است که در خط 10 تا 12 تعریف کرده ایم. در این تابع ابتدا با دستور delete محتوای متنی داخل کادر txt را پاک می کنیم. سپس باید متن لیبل را هم پاک کنیم. این کار را می توانیم به طور مستقیم با حذف متن لیبل انجام دهیم ، اما در اینجا با فراخوانی تابع transfer داخل تابع clear این کار را انجام داده ایم.

با اجرای برنامه پنجره به این صورت نمایش داده می شود:

tkinter text

به انتهای متن داخل کادر یک جمله اضافه می کنیم:

tkinter text

با کلیک روی دکمه write متن داخل کادر در لیبل نیز نمایش داده می شود:

tkinter text

با کلیک روی دکمه Clear متن کادر و متن لیبل پاک می شوند:

tkinter text

آموزشهای ابزار طراحی GUI در پایتون: tkinter