#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 при написании моего ответа.