Tkinter — Как я могу добавить границу в виджеты ScrolledText?

#python #tkinter #border

#python #tkinter #граница

Вопрос:

По умолчанию Text ScrolledText виджеты и не имеют границы справа и внизу. Как я могу добавить границу, где она отсутствует?

Ниже приведен пример кода:

 from tkinter import *
from tkinter import ttk, scrolledtext

parent = Tk()
parent.geometry("800x485 370 100")
parent.title("My Software")

WhiteFrame=Frame(parent, background="#ffffff")
WhiteFrame.pack()

TextObj=scrolledtext.ScrolledText(WhiteFrame, wrap=WORD, height=20)
TextObj.pack(padx=10, pady=10)

parent.mainloop()
  

Я тоже приложил скриншот:

введите описание изображения здесь

Комментарии:

1. На самом деле там есть граница, но светлого цвета, которая может быть не видна на светлом фоне. Попробуйте изменить ширину границы ( bd или border опцию) или стиль границы ( relief опция), чтобы увидеть различные эффекты на границе. Предложите настройку bd=2 .

2. вы правы, я просто попытался использовать эту инструкцию TextObj=scrolledtext.ScrolledText(WhiteFrame, wrap=WORD, height=20, border=2, relief=SUNKEN) , и теперь я вижу границу, но это действительно плохо.. Мне нужна рамка с одним пикселем и серым цветом, как я показал на прилагаемом скриншоте. возможно ли это?

3. Вы пробовали без установки параметра рельефа, но с установкой bd = 2? Обратите внимание, что цвет границы изменить нельзя.

4. да, у меня тот же результат. SUNKEN является опцией по умолчанию для relief . у bd=2 меня есть граница размером 1 пиксель, где она пропущена, но там, где она уже присутствовала, она изменяется на 2 пикселя, и мне это не нравится.

5. хорошо, ребята, в конце я решил сам. Я инкапсулировал текстовый виджет bd=0 внутри нового фрейма с пользовательской границей, и это все. если вы хотите, вы можете добавить полосу прокрутки отдельно, используя ttk.Scrollbar виджет. это было просто, но немного раздражало.. с моей точки зрения, такие материалы должны быть уже интегрированы в Tkinter. Tkinter прост, но иногда этого недостаточно.

Ответ №1:

Вы можете добавлять границы к фреймам с параметрами highlightborder и highlightthickness при создании фрейма.

 from tkinter import *
from tkinter import ttk, scrolledtext

parent = Tk()
parent.geometry("800x485 370 100")
parent.title("My Software")

WhiteFrame=Frame(parent, background="#ffffff", highlightborder = 'black', highlightthickness = 1)
WhiteFrame.pack()

TextObj=scrolledtext.ScrolledText(WhiteFrame, wrap=WORD, height=20)
TextObj.pack(padx=10, pady=10)

parent.mainloop()
  

Комментарии:

1. highlightborder недопустимый параметр для виджетов фрейма. может быть, вы имели в виду highlightbackground ? в любом случае .. моя цель, как я писал ранее, заключается не в создании границы в моем фрейме (белый фрейм), а в добавлении ее там, где она отсутствует в виджете ScrolledText (TextObj).

2. Параметры «выделить» предназначены не для границы, а для кольца, чтобы показать, имеет ли виджет фокус клавиатуры. Это может выглядеть как граница, но она имеет другие свойства и поведение, отличные от границы, и обычно ее не следует использовать вместо правильной границы.

3. Ты прав, мой плохой. Я имел в виду highlightbackground , но случайно написал border при написании моего ответа.