def changecolour(event):
selected_tkts=0
button_clicked=event.widget
if nooftkt_int==selected_tkts:
print("OK")
if button_clicked['bg']=='white':
button_clicked['bg']='green'
selected_tkts=selected_tkts+1
elif button_clicked['bg']=='green':
button_clicked['bg']='white'
selected_tkts=selected_tkts-1
我使用循环创建了一些按钮,这些按钮的功能是命令。selected_tkts变量未注册,该变量的+1和-1在此函数中似乎不起作用,有人可以提出一种使它起作用的方法吗?
Button
命令不接受(event)
。您将必须使用lambda
并传入Button
。此外,使用set.difference()
简写,您可以轻松地将按钮颜色分配给不是该按钮的颜色。
另请:集合-无序集合
import tkinter as tk
root = tk.Tk()
#name functions according to their ultimate purpose, changing colour is an arbitrary effect
def toggle_ticket(tkt, tkt_id):
#this is how you access external variables when using procedural programming
global selected_tkts
#if "numberof_tkts" is 0 then there is nothing to click and you couldn't end up here
#toggle style
tkt['bg'] = ({'white', 'green'} - {tkt['bg']}).pop()
tkt['fg'] = ({'black', 'white'} - {tkt['fg']}).pop()
#isn't it more helpful to know which tickets are selected?
try:
#remove tkt_id
i = selected_tkts.index(tkt_id)
selected_tkts.pop(i)
except ValueError:
#tkt_id didn't exist ~ append it instead
selected_tkts.append(tkt_id)
#proof
print(selected_tkts)
numberof_tkts = 3
selected_tkts = []
tkt_style = dict(bg="white", fg='black')
tkt_1 = tk.Button(root, text="ticket 1", **tkt_style)
tkt_1.configure(command=lambda: toggle_ticket(tkt_1, 1))
tkt_1.pack()
tkt_2 = tk.Button(root, text="ticket 2", **tkt_style)
tkt_2.configure(command=lambda: toggle_ticket(tkt_2, 2))
tkt_2.pack()
tkt_3 = tk.Button(root, text="ticket 3", **tkt_style)
tkt_3.configure(command=lambda: toggle_ticket(tkt_3, 3))
tkt_3.pack()
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句