如何使用两个状态的Tkinter按钮?

2024-09-25 02:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,当点击Tkinter按钮时,会引起颜色/文本的变化。当第二次单击按钮时,我想还原为原始颜色/文本。在

from Tkinter import *

window = Tk()
window.title("Start/Stop Button")
window.geometry('200x100')

def clicked_rf1():
    btn_rf1.configure(text="Stop")
    lbl_rf1.configure(text="  ON  ", bg="green")

btn_rf1 = Button(window, text="Start", command=clicked_rf1)
btn_rf1.grid(column=1, row=1)
lbl_rf1 = Label(window, text="  OFF ", bg="red")
lbl_rf1.grid(column=2, row=1)

window.mainloop()

我想要一些行为更像一个开关,但我想要一个按钮的外观。在

感谢您的帮助。在


Tags: text文本颜色tkinterconfigurebuttonwindow按钮
3条回答

你需要一个if块来选择要做什么。您可以创建另一个flag变量来跟踪状态,或者只使用当前标签或按钮文本:

from Tkinter import *

window = Tk()
window.title("Start/Stop Button")
window.geometry('200x100')

def clicked_rf1():
    if btn_rf1['text'] == "Start":
        btn_rf1.configure(text="Stop")
        lbl_rf1.configure(text="  ON  ", bg="green")
    else:
        btn_rf1.configure(text="Start")
        lbl_rf1.configure(text="  OFF ", bg="red")

btn_rf1 = Button(window, text="Start", command=clicked_rf1)
btn_rf1.grid(column=1, row=1)
lbl_rf1 = Label(window, text="  OFF ", bg="red")
lbl_rf1.grid(column=2, row=1)

window.mainloop()

这是制作自定义按钮子类的理想场所,因此您可以在程序中包含以下许多子类:

^{pr2}$

另一种方法可能是将“代码堆”放入不同的函数中,在迭代器中收集这些代码,然后从该迭代器中获取next函数并执行它:

def bunchofcode():
    print("foo")

def somethingelse():
    print("bar")

whattodo = iter([bunchofcode, somethingelse])

def clicked_rf1():
    try:
        next(whattodo)()
    except StopIteration:
        print("nothing to do")

或循环行为:

^{pr2}$

对于两状态切换按钮,还可以使用dict将当前状态映射到下一个状态。您还可以使用按钮的relief来标记状态。在

def clicked_rf1():
    transition = {"raised": "sunken", "sunken": "raised"}
    btn_rf1["relief"] = transition[btn_rf1["relief"]]

如果需要切换,可以使用不带指示器的check按钮。它有选择和取消选择状态下的颜色选项,您可以将值和标签绑定在一起,以便在您切换按钮时标签更改。在

像任何按钮一样,您可以将命令绑定到它。函数中的“关”或“关”功能是否可以确定它的值。在

下面是一个简单的例子:

import Tkinter as tk

def toggle():
    if var.get() == "ON":
        print("turning on...")
    else:
        print("turning off...")

root = tk.Tk()
var = tk.StringVar()
toggle = tk.Checkbutton(root, onvalue="ON", offvalue="OFF", width=4,
                        indicatoron=False, 
                        variable=var, textvariable=var,
                        selectcolor="green", background="red",
                        command=toggle)

var.set("OFF")
toggle.pack()

root.mainloop()

相关问题 更多 >