在文本的两种颜色之间交替

时间:2018-08-13 08:13:27

标签: python button tkinter colors

是否有一种方法可以在每次单击时切换按钮的颜色(例如,它从白色开始,第一次单击时变为蓝色,下次单击时又变为白色(如果单击)第三次,它再次变成蓝色...并以相同的模式不断闪烁)。

如果可能的话,python是否有办法记住按钮在前一次会话中的颜色,并在下次启动时保持该颜色?

3 个答案:

答案 0 :(得分:1)

是的,有可能。

在此,按下按钮时,文本颜色从红色切换为蓝色。

如果将按钮选项的关键字参数从 // This method is called when the second activity finishes @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // check that it is the SecondActivity with an OK result if (requestCode == 101) { if (resultCode == RESULT_CANCELED) { onNavigationItemSelected(menuItem) } } } 更改为fg,则在某些系统(不是OSX)上,您将更改背景颜色而不是文本颜色。如果需要,请尝试。

bg

答案 1 :(得分:1)

您可以在按下按钮时更改按钮的颜色。有几种方法可以做到这一点。我已经发布了一些摘要。

这是一个代码:

from tkinter import * #for python2 Tkinter
global x
x = 0
root = Tk()
def b1c(): #this function will run on button press
    global x
    if x == 0:
        b1["bg"] = "blue"
        x += 1
    elif x == 1:
        b1["bg"] = "white"
        x = 0
b1 = Button(root,text="Press me to change the color",command = b1c) #making button
if x == 1:b1["bg"] = "white";x =0 
b1.place(x=1,y=1) #placing the button
mainloop()

上面的代码有点复杂,所以如果您想要一种简单的方法,那么我编写了另一个代码。您还可以通过更改color1color2 (当前为白色和蓝色)的值来更改按钮的颜色:

from tkinter import * #for python2 Tkinter
root = Tk()

color1 = "white" #the default color
color2 = "blue" #the next color
def b1c(): #this function will run on button press
    if b1.cget("bg") == color2:b1["bg"] =color1  #getting current button color
    elif b1.cget("bg") == color1:b1["bg"] =color2 
b1 = Button(root,text="Press me to change the color",bg=color1,command = b1c)
b1.place(x=1,y=1) 
mainloop()

如果您有要在按下按钮时逐一更改的颜色列表,则也可以这样做。在以下代码中,列表为colors

from tkinter import * #for python2 Tkinter
root = Tk()

colors = ["red","blue","green","sky blue"] #place your colors in it which you want to change 1-by-1 (from left to right)
def b1c():
    for colo in colors:
        if b1.cget("bg") == colo:
            try:
                color = colors[colors.index(colo)+1]
            except:
                color = colors[0]
            b1["bg"] = color
            break
b1 = Button(root,text="Press me to change the color",bg=colors[0],command = b1c)
b1.place(x=1,y=1) 
mainloop()

答案 2 :(得分:1)

与其他答案不同,我建议使用一种面向对象的方法。 下面的示例使用tkinter Button类作为基础,但是添加了on_coloroff_color参数,以指定当按钮处于打开/关闭状态时希望按钮为哪种颜色。

这样,您可以根据需要拥有任意数量的具有相似行为的按钮,而不必具有更改每个按钮状态的功能。这种行为是在类中定义的。

on_coloroff_color是可选参数,如果未指定,则默认分别为'green'和'red'。

import tkinter as tk

def pressed():
    print("Pressed")

class ToggleButton(tk.Button):
    def __init__(self, master, **kw):
        self.onColor = kw.pop('on_color','green')
        self.offColor = kw.pop('off_color','red')
        tk.Button.__init__(self,master=master,**kw)
        self['bg'] = self.offColor
        self.bind('<Button-1>',self.clicked)
        self.state = 'off'
    def clicked(self,event):
        if self.state == 'off':
            self.state = 'on'
            self['bg'] = self.onColor
        else:
            self.state = 'off'
            self['bg'] = self.offColor 


root = tk.Tk()
btn = ToggleButton(root,text="Press Me", on_color='blue',off_color='yellow',command=pressed)
btn.grid()

btn2 = ToggleButton(root,text="Press Me",command=pressed)
btn2.grid()

root.mainloop()

为了记住每个按钮的状态,您需要先保存一个文件,然后在启动时再次打开它。过去,我是通过编写一个包含所有设置的字典的JSON文件来完成此操作的。要在应用程序关闭时执行某些操作,可以将函数调用绑定到窗口管理器的delete window方法

root.protocol("WM_DELETE_WINDOW", app.onClose)

当窗口关闭时,这将调用onClose的{​​{1}}方法。在此方法内部,您只需收集按钮的各种状态并将它们写入文件。例如

app

当您再次使用类似的方法打开程序时,可以再次读回该信息

settings = {}
settings['btn2_state'] = btn2.state
with open('settings.json','w') as settings_file:
    settings.write(json.dumps(settings))