【问题标题】:tkinter radiobutton: is it possible to toggle value & color with only 1 buttontkinter 单选按钮:是否可以仅使用 1 个按钮切换值和颜色
【发布时间】:2020-06-06 09:13:01
【问题描述】:

我知道单选按钮是一个常见的话题:我花了几个小时试图找到一个示例解决方案,但没有运气。也许我错过了。无论如何,我希望有一个单选按钮,我按下它可以在 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()

如果有更好的小部件可以使用,请告诉我。谢谢你。帕特里克

【问题讨论】:

标签: python tkinter radio-button toggle


【解决方案1】:

您可以为此使用Checkbutton

您可以分配会改变颜色的函数 - 但在 Linux 上,只有当您拥有 indicatoron=True(默认值)时,它才会正确改变颜色。

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()

但您也可以使用Button 来做同样的事情。

如果是ONOFF,您只需在按下按钮时更改变量中的值即可获得信息。

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()

【讨论】:

    【解决方案2】:

    单选按钮不是这个想法的最佳选择(它们旨在用于多种用途),但它们已经使用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()
    

    这会产生:

    如您所见,按钮的背景变为白色;使用 indicatoron 不支持颜色。 (绿色和红色不可用)

    我建议您查看checkbutton 小部件。

    【讨论】:

      猜你喜欢
      • 2019-03-07
      • 1970-01-01
      • 2020-01-22
      • 2019-05-29
      • 2020-04-21
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多