Радиопереключатель tkinter: можно переключать значение и цвет только с 1 кнопкой - PullRequest
0 голосов
/ 22 февраля 2020

Я знаю, что радиопереключатели - частая тема c: я потратил несколько часов, пытаясь найти пример решения, но не повезло. Может быть, я пропустил это. В любом случае, я хотел бы иметь одну радиокнопку, которую я нажимаю для переключения между 0 и 1 и которая также меняет цвет с зеленого (значение = 0, отключение звука отключено) на красный (значение = 1, отключение звука включено). Ниже приведен мой код для решения с двумя кнопками (без изменения цвета):

from tkinter import *  # Python 3

def Set_Mute(value):
    Mute = (value)
    if Mute > 0:
        print ("Mute is On", Mute)
    if Mute == 0:
        print ("Mute is Off", Mute)
    return

root = Tk()
root.title("Fidelity Science Audio Control GUI")
root.geometry("500x500")

Radiobutton1 = Radiobutton(root, text="Mute On", indicatoron=0,
                selectcolor="light blue", command=lambda: Set_Mute(1))
Radiobutton1.grid(row=10, column=30)

Radiobutton2 = Radiobutton(root, text="Mute Off", indicatoron=0,
                selectcolor="light blue", command=lambda: Set_Mute(0))
Radiobutton2.grid(row=10, column=40)

root.mainloop()

Если есть лучший виджет для использования, пожалуйста, дайте мне знать. Спасибо. Patrick

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Для этого вы можете использовать Флажок .

Вы можете назначить функцию, которая будет изменять цвета - но на Linux она меняет цвета правильно только при наличии indicatoron=True (значение по умолчанию).

enter image description here enter image description here

import tkinter as tk

def change():
    #print(selected.get())

    if selected.get():
        cb['text'] = 'Mute OFF'
        cb['bg'] = 'red'
        cb['activebackground'] = 'red'
        #cb['highlightbackground'] = 'red'
    else:        
        cb['text'] = 'Mute ON'
        cb['bg'] = 'green'
        cb['activebackground'] = 'green'
        #cb['highlightbackground'] = 'green'

root = tk.Tk()

selected = tk.BooleanVar()

cb = tk.Checkbutton(root,
                    text="Mute ON",
                    bg='green',
                    activebackground='green',
                    variable=selected,
                    #indicatoron=False,
                    command=change)
cb.pack()

root.mainloop()

Но вы также можете использовать Кнопка , чтобы сделать то же самое.

Вам нужно только изменить значение в переменной, когда вы нажимаете кнопку, чтобы получить информацию, если это ON или OFF.

enter image description here enter image description here

import tkinter as tk

def change():
    #change value
    selected.set(not selected.get())
    #print(selected.get())

    if selected.get():
        btn['text'] = 'Mute OFF'
        btn['bg'] = 'red'
        btn['activebackground'] = 'red'
    else:        
        btn['text'] = 'Mute ON'
        btn['bg'] = 'green'
        btn['activebackground'] = 'green'

root = tk.Tk()

selected = tk.BooleanVar(value=False)

btn = tk.Button(root,
                    text="Mute ON",
                    bg='green',
                    activebackground='green',
                    command=change)
btn.pack()

root.mainloop()
0 голосов
/ 22 февраля 2020

Радиокнопки - не лучший выбор для этой идеи (они предназначены для многократного использования), но они уже меняют цвет с indicatoron, как показано:

from tkinter import * 

root = Tk()

v = IntVar()
button1 = Radiobutton(root, indicatoron=0, text="One", variable=v, font='Verdana, 10', value=0)
button2 = Radiobutton(root, indicatoron=0, text="Two", variable=v, font='Verdana, 10', value=1)
button3 = Radiobutton(root, indicatoron=0, text="Three", variable=v, font='Verdana, 10', value=2)
button1.pack(); button2.pack(); button3.pack()
mainloop()

Это дает:

result

Как видите, фон кнопки меняется на белый; цвета не поддерживаются с использованием indicatoron. (зеленый и красный недоступны при этом)

Я предлагаю вам взглянуть на виджет checkbutton .

...