Python tkinter按钮触发的函数中的变量不受影响
我使用循环创建了一些按钮,函数是这些按钮的命令 所选的_tkts变量未注册 变量的+1和-1在这个函数中似乎不起作用Python tkinter按钮触发的函数中的变量不受影响,python,tkinter,Python,Tkinter,我使用循环创建了一些按钮,函数是这些按钮的命令 所选的_tkts变量未注册 变量的+1和-1在这个函数中似乎不起作用 有人能建议一种方法让它工作吗?按钮命令不接受(事件)。您必须使用lambda并输入按钮。此外,使用set.difference()速记,您可以轻松地将按钮的颜色指定给任何一个没有指定的颜色 见: 在函数结束时,选定的值\u tkts将始终为1或-1。它不计算任何值,因为它在开始时设置为0,并且可能只改变1个刻度。如果您在函数末尾打印它,您将看到,如果您刚才单击的按钮变为绿色,则它
有人能建议一种方法让它工作吗?
按钮
命令不接受(事件)
。您必须使用lambda
并输入按钮
。此外,使用set.difference()
速记,您可以轻松地将按钮的颜色指定给任何一个没有指定的颜色
见:
在函数结束时,选定的
值\u tkts
将始终为1或-1。它不计算任何值,因为它在开始时设置为0,并且可能只改变1个刻度。如果您在函数末尾打印它,您将看到,如果您刚才单击的按钮变为绿色,则它始终为1,否则为-1。您打算如何使用此功能?
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
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()