我有以下代码,当单击Tkinter按钮时会导致颜色/文本更改。我想在第二次单击按钮时恢复原始颜色/文本。
var target = apex.jQuery(this.triggeringElement).closest('tr').find('input[name="f30"]')
//console.log(target)
var source = apex.jQuery(this.triggeringElement).find('input[name="f20"]')
console.log(source)
console.log('valor default: '.concat(source.context.defaultValue))
//var lista = apex.jQuery(this.affectedElements[0].innerHTML).find('input[name="f20"]')
var lista = apex.jQuery(source.context.form).find('input[name="f20"]')
console.log('lista: '.concat(lista))
for (var x=0;x<lista.length;x++){
if (source.context.value == lista[x].value && source.context.defaultValue != lista[x].defaultValue){
console.log(source)
lista[x].value = source.context.defaultValue
lista[x].defaultValue = source.context.defaultValue
source.context.defaultValue = source.context.value
console.log(lista[x])
}
}
var colecao = apex.jQuery().find('input[name="f20"]')
var result = target.val() * source.val();
我想要的东西更像是一个切换,但我想要一个按钮的外观。
帮助感激地收到了。
答案 0 :(得分:4)
您需要一个if块来选择要做的事情。您可以创建另一个标志变量来跟踪状态,或者只使用当前的标签或按钮文本:
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()
这是制作自定义Button子类的理想场所,因此您可以在程序中使用其中的许多子句:
from Tkinter import *
window = Tk()
window.title("Start/Stop Button")
window.geometry('200x100')
class Christina(Frame):
def __init__(self, master=None, **kwargs):
Frame.__init__(self, master, **kwargs)
self.btn = Button(self, text="Start", command=self.clicked)
self.btn.grid(column=0, row=0)
self.lbl = Label(self, text=" OFF ", bg="red")
self.lbl.grid(column=1, row=0)
def clicked(self):
if self.btn['text'] == "Start":
self.btn.configure(text="Stop")
self.lbl.configure(text=" ON ", bg="green")
else:
self.btn.configure(text="Start")
self.lbl.configure(text=" OFF ", bg="red")
btn1 = Christina(window)
btn1.grid()
btn2 = Christina(window)
btn2.grid()
btn3 = Christina(window)
btn3.grid()
window.mainloop()
答案 1 :(得分:2)
另一种方法可能是将“一堆代码”放入不同的函数中,在迭代器中收集它们,然后从该迭代器中获取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")
或者对于循环行为:
from itertools import cycle
whattodo = cycle([bunchofcode, somethingelse])
对于双状态切换按钮,您还可以使用dict
将当前状态映射到下一个状态。您也可以使用按钮relief
来标记状态。
def clicked_rf1():
transition = {"raised": "sunken", "sunken": "raised"}
btn_rf1["relief"] = transition[btn_rf1["relief"]]
答案 2 :(得分:2)
如果您想要切换,可以使用没有指示符的检查按钮。它具有选定和取消选择状态下颜色的选项,您可以将值和标签绑定在一起,以便在切换按钮时标签发生变化。
与任何按钮一样,您可以将命令绑定到它。该命令可以检查变量的值,以确定它是否应该执行&#34; on&#34;功能或&#34;关&#34;功能
这是一个简单的例子:
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()