Making a rectangle border around text in Textbox python tkinter

Question:

I want to have a rectangle border around certain text that is added to the text box from the end and will be placed at the center.

For example:

enter image description here

Unfortunately, I can’t find a way to do that, because I
don’t know how to place texts at the center of the line in the text box, and don’t know how to surround a text with a rectangle.

Asked By: Chopin

||

Answers:

Try putting the text box into it’s own frame.

Some thing like this:

from Tkinter import *
root = Tk()

labelframe = LabelFrame(root, text="LabelFrame")
labelframe.pack()

text = Label(labelframe, text="Text inside labelframe")
text.pack()

root.mainloop()
Answered By: Programmer

You can add the border to the Entry using relief = "solid", centre the text with outline and you can use grid to align the widgets the way you want.

import tkinter as tk

root = tk.Tk()
root.geometry("400x200")
root.grid_columnconfigure(0, weight = 1)

ent1 = tk.Entry(root, relief = "solid", justify = "center")
ent1.insert(0, "hello")
ent1.grid(row = 0, column = 0, pady = 10)

ent2 = tk.Entry(root, relief = "solid", justify = "center")
ent2.insert(0, ".......")
ent2.grid(row = 1, column = 0, pady = 10)

lab1 = tk.Label(root, text = "hello")
lab1.grid(row = 2, column = 0, sticky = "w")

lab2 = tk.Label(root, text = "hello")
lab2.grid(row = 3, column = 0, sticky = "w")

root.mainloop()

Most of this is straightforward, the root.grid_columnconfigure line makes the grid take up the full width of the root window by giving the first column a weight of 1. The result is very similar to your example:
Image of Tkinter window

Answered By: Henry

You can wrap a Label with border between a space and newline with justify='center' in a Text widget.

Below is an example:

import tkinter as tk

root = tk.Tk()

textbox = tk.Text(root, width=30, height=10)
textbox.pack()

textbox.tag_config('center', justify='center')

def center_label(textbox, **kwargs):
    textbox.insert('end', ' ', 'center')
    lbl = tk.Label(textbox, bd=3, relief='solid', **kwargs)
    textbox.window_create('end', window=lbl)
    textbox.insert('end', 'nn')

center_label(textbox, text='hello', width=10, font='Arial 12 bold')
center_label(textbox, text='............', width=20)

textbox.insert('end', 'nhellon')

root.mainloop()

Result:

enter image description here

Answered By: acw1668

You could create an Entry widget in the textbox using text.window_create(). You could customize the border of the Entry widget, and you would be able to type text inside it. To make it look more like part of the textbox, you should register events so when the user presses Right and the caret is one character left of the Entry, give the Entry focus using focus_set. You could do the same with the Left.

Answered By: Ethan Chan