Níže je příklad, který ukazuje, jak se propojí kliknutí na tlačítko (které nastaví hodnotu a pastelové barvy) a pohyb posuvníku (který nastaví syté barvy) pomocí sdílené proměnné. Klíčové je, že obě funkce pracují se stejnou proměnnou (např. self.slider_var) – když se kliknutím nastaví nová hodnota, funkce pro tlačítko (toggle_update_feeling_button) zavolá self.slider_var.set(nová_hodnota) a při pohybu posuvníku se slider_update_feeling_button spustí a přečte tu hodnotu, aby nastavila barvy tlačítka.
Níže je úryvek kódu, který demonstruje tuto propojení:
def toggle_feeling(self):
    """Při kliknutí na tlačítko cyklí hodnoty podle seznamu a nastaví pastelové barvy.
       Zároveň se nastaví hodnota posuvníku."""
    states = [0, 2, 5, 7, 9]
    current = self.feeling_var.get()
    new_index = (states.index(current) + 1) % len(states)
    new_state = states[new_index]
    self.feeling_var.set(new_state)
    # Aktualizace tlačítka pomocí pastelových barev:
    self.toggle_update_feeling_button()
    # Synchronizace posuvníku s novou hodnotou:
    self.slider_var.set(new_state)
def toggle_update_feeling_button(self, value=None):
    """Aktualizuje barvu tlačítka podle aktuální hodnoty feeling_var pomocí pastelových odstínů."""
    feeling_value = self.feeling_var.get()
    pastel_light = self.pastel_colors_light.get(feeling_value, "#A8E6A3")
    pastel_dark = self.pastel_colors_dark.get(feeling_value, "#658A62")
    # Nastaví pastelové barvy na tlačítko (barva textu = světlá, pozadí = tmavá)
    self.feeling_button.config(bg=pastel_dark,
                               fg=pastel_light,
                               activebackground=pastel_light,
                               activeforeground=pastel_dark)
def slider_update_feeling_button(self, value=None):
    """Při pohybu posuvníku aktualizuje tlačítko na syté barvy.
       Čte hodnotu posuvníku (self.slider_var) a nastaví barvy dle slovníků self.colors a self.colors_dark."""
    slider_value = self.slider_var.get()  # Hodnota posuvníku (0-10)
    color_light = self.colors.get(slider_value, "#FFFFFF")
    color_dark = self.colors_dark.get(slider_value, "#000000")
    self.feeling_button.config(bg=color_dark,
                               fg=color_light,
                               activebackground=color_light,
                               activeforeground=color_dark)
Jak to funguje:
- 
Kliknutí na tlačítko: 
 Funkcetoggle_feelingcyklí hodnoty v seznamu[0, 2, 5, 7, 9]a nastaví novou hodnotu doself.feeling_var. Následně zavolátoggle_update_feeling_button, která nastaví pastelové barvy tlačítka. Kromě toho se také zavoláself.slider_var.set(new_state), čímž se synchronizuje hodnota posuvníku.
- 
Pohyb posuvníku: 
 Při pohybu posuvníku se spustí funkceslider_update_feeling_button(protože je uvedena jako command u posuvníku). Ta přečte aktuální hodnotu zself.slider_vara nastaví syté barvy tlačítka podle slovníkůself.colorsaself.colors_dark.
Tímto způsobem se propojí obě funkce – změna stavu tlačítka i změna posuvníku pracují se stejnou hodnotou, takže barvy se aktualizují podle toho, zda byla změněna pomocí kliknutí (pastelové barvy) nebo pohybem posuvníku (syté barvy).
Důležité body:
- Ujisti se, že pro tlačítko i posuvník používáš stejnou proměnnou (např. self.feeling_varaself.slider_var) a že jejich hodnoty jsou synchronizovány.
- V případě více emocí (každé s vlastním tlačítkem a posuvníkem) musíš mít mechanismus, který aktualizuje správné widgety. V tvém kódu to řešíš například ve funkci emotion_slider_update, kde procházíš widgety podle názvu emoce.
Pokud potřebuješ, aby toto propojení bylo provedeno pro každou emoci zvlášť, ujisti se, že každé tlačítko a posuvník mají své vlastní proměnné, a synchronizaci řeš ve smyčce, která prochází všechny emoce.
Dej vědět, jestli tento přístup odpovídá tvému zadání nebo jestli je třeba ještě něco doladit!
 
 
 
Žádné komentáře:
Okomentovat