Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ttk.按钮清洁剂更换说明反应_Python_Tkinter_Ttk_Code Cleanup_Ttkwidgets - Fatal编程技术网

Python ttk.按钮清洁剂更换说明反应

Python ttk.按钮清洁剂更换说明反应,python,tkinter,ttk,code-cleanup,ttkwidgets,Python,Tkinter,Ttk,Code Cleanup,Ttkwidgets,我的代码可以工作,但希望有一个更干净的。我有24个开关按钮。单击“打开”按钮时,该按钮将被禁用并呈绿色,而“关闭”按钮将变灰并显示“!disabled”。有没有一种方法可以做到这一点而不需要大量的开关方法?目前我有48种方法、样式等,总计800行代码。我知道一定有更好的方法 以下是一个例子: 从tkinter导入* 从tkinter导入ttk 类应用程序: 定义初始(自我,主): 主标题(“应用程序”) master.可调整大小(False,False) self.style=ttk.style

我的代码可以工作,但希望有一个更干净的。我有24个开关按钮。单击“打开”按钮时,该按钮将被禁用并呈绿色,而“关闭”按钮将变灰并显示“!disabled”。有没有一种方法可以做到这一点而不需要大量的开关方法?目前我有48种方法、样式等,总计800行代码。我知道一定有更好的方法

以下是一个例子:

从tkinter导入*
从tkinter导入ttk
类应用程序:
定义初始(自我,主):
主标题(“应用程序”)
master.可调整大小(False,False)
self.style=ttk.style()
self.frame\u头文件=ttk.frame(主文件)
self.frame_header.pack()
self.frame\u站=ttk.frame(主)
self.frame_stations.pack()
#按钮的默认样式和文本
self.style.configure('n1_on.TButton',前台='#D2D2D2D2',字体=('Arial',15,'bold'))
self.style.configure('n1_off.TButton',前台='#D2D2D2D2',字体=('Arial',15,'bold'))
self.style.configure('n2_on.TButton',前台='#D2D2D2D2',字体=('Arial',15,'bold'))
self.style.configure('n2_off.TButton',前台='#D2D2D2D2',字体=('Arial',15,'bold'))
#计时时更改状态(禁用)和字体颜色
self.style.map('n1_on.TButton',前台=[('disabled','green'))
self.style.map('n1_off.TButton',前台=[('disabled','red'))
self.style.map('n2_off.TButton',前台=[('disabled','red'))
self.style.map('n2_on.TButton',前台=[('disabled','green'))
ttk.标签(self.frame_stations,text=“BUTTONS”).grid(行=0,列=1,列span=2,padx=5)
#创建的按钮和位置
self.n1_on=ttk.按钮(self.frame_站,text='on',style='n1_on.TButton',command=self.n1_on_状态,)
网格上的self.n1_(行=1,列=1)
self.n2_on=ttk.按钮(self.frame_站,text='on',style='n2_on.TButton',command=self.n2_on_状态)
网格上的self.n2_(行=2,列=1)
self.n1_off=ttk.按钮(self.frame_站,text='off',style='n1_off.TButton',command=self.n1_off_状态)
自n1_离开网格(行=1,列=2)
self.n2_off=ttk.按钮(self.frame_站,text='off',style='n2_off.TButton',command=self.n2_off_状态)
自n2_离网(行=2,列=2)
def n1_开启_状态(自身):
打印('n1已打开')
self.n1_on.state(['disabled']))
self.n1_关闭状态(['!disabled'])
def n2_开启_状态(自身):
打印('n2已打开')
self.n2_on.state(['disabled']))
self.n2_关闭状态(['!disabled'])
def n1_关闭_状态(自身):
打印('n1\u已关闭')
self.n1_on.state(['!disabled']))
self.n1_off.state(['disabled']))
def n2_关闭_状态(自身):
打印('关闭n2')
self.n2_on.state(['!disabled'])
self.n2_off.state(['disabled']))

你不能这样定义它吗?为什么每次都要为每个按钮定义函数

# Define this above your code and pass it the buttons you want to turn on or off
def turn_off_buttons(turn_off, turn_on):
    # Also when we want to inform the user we usually put the 'print' statement after the work is finished 
    # print(f'{turn_off} turned off') (Not here)
    # turn_on.state(['!disabled']) 
    # turn_off.state(['disabled'])
    # I would suggest you to use 'config' instead of state since it is more applicable
    turn_off.config(state=DISABLED)
    turn_on.config(state=NORMAL)
    print(f'{turn_off} turned off')
例如:

from tkinter import *
from tkinter import ttk


# Define this above your code and pass it the buttons you want to turn on or off
def turn_off_buttons(turn_off, turn_on):
    # Also when we want to inform the user we usually put the 'print' statement after the work is finished 
    # print(f'{turn_off} turned off') (Not here)
    # turn_on.state(['!disabled']) 
    # turn_off.state(['disabled'])
    # I would suggest you to use 'config' instead of state since it is more applicable
    turn_off.config(state=DISABLED)
    turn_on.config(state=NORMAL)
    print(f'{turn_off} turned off')

class TurnOnOff:
    def __init__(self):
        self.root = Tk()
        self.root.geometry("550x280")
        self.button1 = ttk.Button(self.root, text="Turn On", command=lambda: turn_off_buttons(self.button1, self.button2))
        self.button2 = ttk.Button(self.root, text="Turn Off", command=lambda: turn_off_buttons(self.button2, self.button1))
        self.button1.pack(pady=5)
        self.button2.pack(pady=5)
        self.root.mainloop()


if __name__ == "__main__":
    TurnOnOff()

谢谢,这为我节省了数百行代码。感谢you@rayguess22,随时