Python tkinter rgb colors

Именованные цвета в tkinter

В этой небольшой заметке я рассказываю про именованные цвета tkinter и показываю как с ними можно работать. Попутно вы узнаете как с помощью python можно вытащить и обработать данные из web страницы и получить список всех возможных цветов. И, наконец, мы соорудим, две простецкие программы для просмотра списка цветов.

Tkinter использует именованные цвета. Поэтому для задания кода цвета можно задать rgb код цвета или мы можем написать название. Так вместо ‘#C0C0C0’ можем написать ‘silver’, вместо ‘#800000’ — ‘maroon’

Всё это замечательно, но в этой бочке мёда есть ложка дёгтя. Если вы знаете имена цветов, то вы получите правильный результат. А получить список доступных цветов из программы практически невозможно. Вызов тулкита, возвращающий список имен, видимо, отсутствует. Тем не менее, таблицу-справочник доступных имён можно найти в системной документации на tcl/tk,который лежит здесь:http://www.tcl.tk/man/tcl8.6.13/TkCmd/colors.htm .

Просмотр системной документации наводит нас на мысль, что в основе лежит список цветов системы X11. Кроме того, абсолютной точности тут может и не быть — этот список изменялся со временем, так что возможна небольшая разница между разными версиями этого списка. Поэтому мы просто обращаемся к последней версии документации.

Отметим, что некоторые цвета встречаются дважды, — например, «antique white» и «AntiqueWhite» представляют один и тот же цвет. Сделано это для удобства и упрощения кодирования программ.

Получаем список цветов из сети.

Я написал небольшое приложение gettkcolors.py, которое обращается к сайту с документацией, вытаскивает таблицу именованных цветов из системной документации и сохраняет все системные цвета в два локальных файла следующим образом:

Читайте также:  (.*)

CSVFILENAME = PROJECT_PATH / ‘tkcolors.csv’

Программа использует модуль request, забирает страницу в буфер и передаёт её в в процедуру разбора и получения списка цветов.

Вытащить цвета из страницы можно с помощью BeautifulSoup4. Это очень популярная библиотека для анализа страниц и извлечения данных из hmtl и xml. С её помощью мы можем вытаскивать данные из html таблиц в том числе. С помощью модулей requests и BeatifulSoup4, мы получаем универсальный механизм для вытаскивания данных из веб страниц для наших приложений.

Собственно сам разбор страницы занял 20 строк, а вся программа около 150. Реализовывать на python подобные алгоритмы очень удобно.

Таким способом мы получили внешний файл tknamedcolors.py, который содержит tuple со всеми именами цветов:

tkColorNames = ["alice blue","AliceBlue","antique white", "AntiqueWhite", "AntiqueWhite1","AntiqueWhite2","AntiqueWhite3","AntiqueWhite4", "aqua","aquamarine","aquamarine1","aquamarine2", "aquamarine3","aquamarine4","azure","azure1", "azure2","azure3","azure4","beige", "bisque","bisque1","bisque2","bisque3", "bisque4","black","blanched almond","BlanchedAlmond", "blue","blue violet","blue1","blue2", "blue3","blue4","BlueViolet","brown", "brown1","brown2","brown3","brown4", . 

Быстренько делаем программу для визуализации полученного кортежа. И неожиданно обнаруживаем небольшое препятствие. При первоначальном запуске оказалось, что в системной документации есть две опечатки в именах цветов. При попытке установить цвета ‘agua’ и ‘crymson’ мы получаем ошибку. Вносим в нашу программу загрузки цветов исправление :

if cn == 'agua' : cn = 'aqua' if cn == 'crymson' : cn = 'crimson' 

Теперь мы можем закончить простейший просмотрщик имен цветов ( showmetkcolors.py ).

Если внимательно посмотреть на таблицу, то можно обнаружить, что некоторые цвета встречаются дважды. Например, все оттенки серого.

Как преобразовать название цвета в RGB

Сделать это можно с помощью вызова winfo_rgb(colorname) экземпляра toplevel.

r,g,b=self.mainwindow.winfo_rgb(colorname) 

Справочник цветов

Теперь мы можем соорудить приложение, которое показывает все имена цветов и коды в виде дерева-showmecolorstree.py.

С помощью pygubu-designer (см. про pygubu-designer ссылку в конце статьи) мы делаем несложный интерфейс. И используем небольшой трюк для изображения цветных прямоугольников в качестве элементов treeview. Для отображения мы загружаем монохромное изображение прозрачного прямоугольника, и устанавливаем для него цвет фона:

def fill_colors(self): "fill treeview with colors" self.ccim=[] i=1 for colorname in tkColorNames: #load xpm , set backround color self.xpmrect=BitmapImage(file=xxpm, background=colorname,foreground='black') r,g,b=self.mainwindow.winfo_rgb(colorname) rgbvalue=listrgb2hexrgb((r,g,b)) self.ccim.append(self .xpmrect) self.tree.insert('','end',image = self.xpmrect,text=' ',value=(colorname, rgbvalue)) i+=1 

Вот мы и получили программу из 82 строк включая пробелы. Теперь вы можете просматривать доступные имена для стандартных цветов и соответствующие им коды. Можно скачать исходный код примеров этой статьи

Источник

How to use rgb color codes in tkinter?

Tkinter has many inbuilt features and attributes that help the application developer to build a robust and featured application. We can set the attributes such as background color, foreground color, and other properties of a widget using the configure method in Tkinter.

To set the background color or foreground color of a widget, we can use both default and RGB color codes. RGB is defined by the 6 digit alphanumeric character containing different digits of R, G, B values. In order to use RGB color codes in tkinter, we have to define it using the format #aab123.

Example

# Import the required libraries from tkinter import * from tkinter import ttk # Create an instance of tkinter frame win = Tk() # Set the size of the tkinter window win.geometry("700x350") # Configure the color of the window win.configure(bg='#65A8E1') # Define the style for combobox widget style = ttk.Style() style.theme_use('xpnative') # Define an event to close the window def close_win(e): win.destroy() # Add a label widget label = ttk.Label(win, text="Eat, Sleep, Code and Repeat", font=('Times New Roman italic', 22), background="black", foreground="white") label.place(relx=.5, rely=.5, anchor=CENTER) win.mainloop()

Output

Executing the above code will display a window with some customized background color.

Now, find a new color code to change the background color of the window.

Источник

Python tkinter rgb colors

Ряд виджетов в Tkinter поддерживают установку цвета для различных аспектов. Например, у виджета Label можно установить параметры foreground и background , которые отвечают за цвет текста и фона соответственно. У некоторых виджетов настройки цвета спрятаны в параметре style.

Цвет можно установить разными способами:

    Именнованные цвета, например, «red», который соответствует красному цвету. В зависимости от платформы набор доступных именнованных цветов может отличаться. Все доступные именнованные цвета можно посмотреть в документации. Например:

ttk.Label(text="Hello World", foreground="red")
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") label = ttk.Label(text="Hello World", padding=8, foreground="#01579B", background="#B3E5FC") label.pack(anchor=CENTER, expand=1) root.mainloop()

Установка цвета в Tkinter и Python

Если нам даны отдельные коды RGB-составляющих, то их можно сконвертировать в шестнадцатеричный код цвета:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def get_rgb(rgb): return "#%02x%02x%02x" % rgb label = ttk.Label(text="Hello World", padding=8, foreground=get_rgb((0, 77, 64)), background=get_rgb((128, 203, 196))) label.pack(anchor=CENTER, expand=1) root.mainloop()

Здесь функция get_rgb в качестве параметра получает кортеж из трех составляющих цвет RGB и с помощью форматирования строки переводит значения кортежа в шестнадцатеричный код

Источник

Оцените статью