如何解决tkinter按钮触发的函数中的变量不受影响
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()
的简写形式,您可以轻松地将按钮颜色分配给不是该按钮的颜色。
请参阅:sets - Unordered Collections
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。