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

2024-09-28 05:22:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用循环创建了一些按钮,函数是这些按钮的命令 所选的_tkts变量未注册 变量的+1和-1在这个函数中似乎不起作用 有谁能建议一种让它工作的方法吗


Tags: 函数eventifdefbuttongreenwidget按钮
1条回答
网友
1楼 · 发布于 2024-09-28 05:22:29

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()

相关问题 更多 >

    热门问题