Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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 tkinter按钮触发的函数中的变量不受影响_Python_Tkinter - Fatal编程技术网

Python tkinter按钮触发的函数中的变量不受影响

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

我使用循环创建了一些按钮,函数是这些按钮的命令 所选的_tkts变量未注册 变量的+1和-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()