此刻我面临两个问题。
当我单击“麦克”按钮和所有麦克的子按钮时,我希望上一行按钮被禁用,而不是“萨拉”按钮
当我单击“ Sara”按钮时,我希望Mike的子按钮被破坏并恢复到原始状态。
我很难全神贯注于该功能。我觉得自己走的路很长。任何帮助将不胜感激!
import tkinter as tk
app = tk.Tk()
app.geometry("300x300")
def buttonA1State():
if (buttonA1['state'] == tk.NORMAL):
buttonA1['state'] = tk.DISABLED
else:
buttonA1['state'] = tk.NORMAL
def btn3():
buttonA2 = tk.Button(app, text="Button A2",command = lambda:[buttonA1State(), btn5()])
buttonA2.grid(padx=10, pady=10, row=2, column=1)
buttonA3 = tk.Button(app, text="Button A3",command=btn4)
buttonA3.grid(padx=10, pady=10, row=2, column=2)
def btn4():
buttonA4 = tk.Button(app, text="Button A4")
buttonA4.grid(padx=10, pady=10, row=3, column=2)
def btn5():
buttonA5 = tk.Button(app, text="Button A5")
buttonA5.grid(padx=10, pady=10, row=3, column=1)
buttonA1 = tk.Button(app, text="Mike", command = lambda:[buttonA1State(), btn3()])
buttonA1.grid(padx=10, pady=10, row=1, column=1)
buttonB1 = tk.Button(app, text="Sara", command = btn3 )
buttonB1.grid(padx=10, pady=10, row=1, column=2)
app.mainloop()
答案 0 :(得分:1)
names = [["Mike", "Sara"]]
buttons = []
for x in range(names):
buttons.append()
for y in range(names[x]):
buttons[x].append(Button(app, text=names[x][y])))
上面的代码将允许您使用易于理解的矩阵来引用按钮,自从在第1行启动按钮以来,您必须稍作调整,但这很容易做到。您需要一个全局值来跟上活动的行和列。
class APerson:
def __init__(self, window, name):
self.name = name
self.selected = False
self.select_button = Button(window, text=self.name command=select)
self.secondary_button = Button(window, text="Secondary")
self.another_button = Button(window, text="More Buttons")
def toggle_select(self):
self.selected = not self.selected
mike = APerson(app, "Mike")
sara = APerson(app, "Sara")
def main_callback:
if mike.selected:
etc...
app.after(1000, main_callback)
这些是摘要,您可能会发现有帮助。一般而言,有很多方法可以在python和程序设计中进行操作,因此您确实必须选择最能解决您要解决的问题的方法。您可能更喜欢创建传递按钮的行对象,而不是创建具有按钮的人员对象。我会避免对每个动作进行硬编码,尤其是在您需要程序完全扩展的情况下。