Цветное тестирование tkColorChooser

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

Я думал о проведении тестов, таких как len(colorString) == 7 (или 4) или colorString.startswith('#'), но мне все равно пришлось бы проводить тестирование для названий цветов, таких как 'black' и 'green' и все другие доступные цвета... Кажется, что это большая работа, поэтому мне было интересно, есть ли более простой способ сделать это?

Я заинтересован в тесте, таком как

string = 'black'
Is string a valid color ?
return True

string = 'blac'
Is string a valid color?
return False

Ура!

2 ответа

Решение

Вы можете вызвать метод winfo_rgb в корневом окне, давая ему строку, которая представляет цвет. Если цвет правильный, вы получите красный, зеленый и синий компоненты. Если он недействителен, вы получите исключение.

См. http://effbot.org/tkinterbook/widget.htm

У вас есть тип пользователя в имени цвета? Если так, то почему бы не позволить пользователю выбрать цвет непосредственно из tkColorChooser? Таким образом, любой цвет, выбранный пользователем, является допустимым цветом по определению.

Этот пример взят из Яна Боднара (zetcode.com):

import Tkinter as tk
class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)   
        self.parent = parent        
        self.initUI()

    def initUI(self):
        self.parent.title("Color chooser")      
        self.pack(fill=tk.BOTH, expand=1)

        self.btn = tk.Button(self, text="Choose Color", command=self.onChoose)
        self.btn.place(x=30, y=30)

        self.frame = tk.Frame(self, border=1, 
                              relief=tk.SUNKEN, width=100, height=100)
        self.frame.place(x=160, y=30)

    def onChoose(self):
        rgb, hx = tkColorChooser.askcolor()
        print(rgb)
        print(hx)
        self.frame.config(bg=hx)

root = tk.Tk()
ex = Example(root)
root.geometry("300x150+300+300")
root.mainloop() 
Другие вопросы по тегам