首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能使用.bind绑定函数,就像在tkinter中的按钮列表中绑定命令标志一样

为什么我不能使用.bind绑定函数,就像在tkinter中的按钮列表中绑定命令标志一样
EN

Stack Overflow用户
提问于 2021-04-02 01:47:55
回答 1查看 35关注 0票数 0

我正在尝试将lambda绑定到具有不同事件的按钮。但是,解释器显示TypeError: list indices must be integers or slices, not Event,如果我用buttons_list[z].bind("<Button-3>", lambda i: print(myList[z]))替换buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i])),则无论按下哪个按钮,它都会打印no。当用buttons_list[z].bind("<Button-3>", print(myList[z]))替换该行时,它只在程序开始时按顺序打印它们,而不是在右击时(如预期的那样)。那么为什么buttons_list.append(tk.Button(self.root, text="Click here" + str(z), command=lambda e=z:print(myList[e])))buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i]))的行为不一样呢?

代码语言:javascript
复制
import tkinter as tk

myList = ["foo", 'bar', 'no']


class TestClass:
    def __init__(self):
        self.num = 0
        self.root = tk.Tk()
        self.make_buttons()
        self.root.mainloop()

    def make_buttons(self):
        buttons_list = []
        for z in range(len(myList)):
            buttons_list.append(
                tk.Button(self.root, text="Click here" + str(z), command=lambda e=z: print(myList[e])))
            buttons_list[z].bind("<Button-3>", lambda i=z: print(myList[i]))
            buttons_list[z].pack()


p = TestClass()

感谢您的帮助,谢谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-02 02:08:15

试试这个:

代码语言:javascript
复制
class TestClass:
    ...
    def make_buttons(self):
        buttons_list = []
        for z in range(len(myList)):
            button = tk.Button(self.root, text="Click here " + str(z), command=lambda z=z: print(myList[z]))
            buttons_list.append(button)
            button.bind("<Button-3>", lambda event, i=z: print(myList[i]))
            button.pack()

问题是,在执行command参数时,tkinter没有给它一个参数。.bind的命令使用一个参数(一个事件)来执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66909295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档