Python: фон виджета Tkinter (кнопки, записи и т.д.)

#python #tkinter

#python #tkinter

Вопрос:

У меня возникла небольшая проблема при создании моего графического интерфейса. При смене фона я могу изменить весь фон, а также фон надписей и тому подобное, Но когда дело доходит до кнопок и полей ввода и т.д., За кнопкой есть белая область, которую я, похоже, не могу изменить : S

Проблему можно увидеть на рисунке ниже.

(У вас недостаточно репутации, чтобы опубликовать картинку, поэтому свяжу ее)http://www.thesite.dk/upload/media/tkinter.png

С помощью кода :

 from Tkinter import *

background = "BLACK"
textColor = "WHITE"
root = Tk()
root.configure(bg=background)

Email = Label(root, text="Enter E-mail Address :", font=("Lucida Grande", 12), fg=textColor, background=background)
Email.grid(row=6, column=0, sticky=NW, padx=19)

EmailField = Entry(root, width=30)
EmailField.grid(row=6, column=0, columnspan=3, sticky=NW, padx=159)

EmailButton = Button(root, text="Mail It !", background=background)
EmailButton.grid(row=6, column=0, columnspan=6, sticky=NW, padx=389)

SM_Status = StringVar()
EmailStatus = Label(root, textvariable=SM_Status, font=("Lucida Grande", 12), fg=textColor, background=background)
EmailStatus.grid(row=6, column=2, sticky=NW, padx=20)
  

Возможно, есть простое решение, но бесчисленные поиски в Google и часы чтения документации и сообщений на форумах ни к чему меня не привели: (Надеюсь, вы сможете помочь…

И да, я использую Mac OS X с Python 2.6

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

1. Я предполагаю, что вы используете Mac? Под Linux (Python2.7, Tkinter 81008) я получаю прямоугольную черную кнопку с белой рамкой. Когда я наведу на него курсор мыши (активирую его), он становится серым.

2. @Mark — Да, я на Mac, но на самом деле не вижу, как наведение курсора мыши (активация) решит мою проблему, поскольку это согласуется с запуском приложения. Спасибо за ввод, хотя 🙂

Ответ №1:

Я знаю, что прошло некоторое время, и вы, конечно, больше не работаете над этим кодом, но я нашел решение, и я опубликую его здесь для всех, у кого есть подобная проблема. Это то же самое, что и способ, которым вы получаете область вокруг записи в качестве цвета фона:

highlightbackground=color

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

1. Откопал мой старый код и проверил, чтобы я мог одобрить ваш ответ, и да, ваше решение сработало 🙂 Хотя немного поздно (и исправьте, что я больше не работаю над этим), это, возможно, поможет другим в том же положении, что и я. Спасибо! 🙂

Ответ №2:

На macintosh вы мало что можете сделать с цветом фона встроенных кнопок. Такова цена, которую мы платим за встроенные кнопки. На других платформах и для других виджетов то, что вы видите, вероятно, является «фоном выделения», который можно изменить с помощью highlightbackground и highlightthickness атрибутов виджета. Это область, используемая виджетом для обозначения фокуса.

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

1. помогло бы использовать другого создателя графического интерфейса вместо Tkinter, или на самом деле возможно изменить дизайн самой кнопки?

Ответ №3:

Похоже, это зависит от платформы и, возможно, от темы в этом. Я предполагаю, что вы используете Mac, судя по тому, как кнопка выглядит на вашем снимке экрана. Кажется, что текст кнопки нарисован внутри растрового изображения, которое обеспечивает округлый контур кнопки. Возможно, Tkinter не в состоянии это контролировать.

В Windows с классической темой фон кнопки черный, но есть серый контур из-за рельефа, который поднимается. Когда я устанавливаю для него значение relief = FLAT, он становится полностью черным.

Было бы полезно, если бы включенный вами образец был доступен для прямого запуска. Мне пришлось добавить определение для textColor, закомментировать command=CMD.send_mail и добавить root.mainloop() в конце. Я также добавил textColor = WHITE в настройку кнопки.

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

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

1. Попытался немного поиграть с опцией relief, но не могу заставить это решить мою проблему: (