在tkinter中绑定到列表框似乎不起作用

时间:2019-02-17 15:46:11

标签: python python-3.x tkinter

我正在尝试将列表框中的项目绑定到1号鼠标按钮,以便当我按下它时它会显示“ hi”。但是,每当我尝试执行此代码时,它就根本无法正常工作。发生什么情况是,当我启动该程序时,无论我单击鼠标按钮1次,它都会一次打印“ hi”,然后再打印一次。谢谢

            from tkinter import *

            class Applikation(Frame): 
                def __init__(self, master):

                    Frame.__init__(self,master)

                    self.master=master
                    self.rssList = Listbox(self.master, height=30, width=50) 
                    self.rssList.grid(row=1, column=0, rowspan=4, padx=10, pady=20)
                    self.rssList.bind("<Button-1>", print("hi"))


            rssReader = Tk()
            rssReader.title("Rss reader")
            rssReader.resizable(10, 10)
            app = Applikation(rssReader).grid()
            rssReader.mainloop()

2 个答案:

答案 0 :(得分:2)

绑定到()时,您需要传递不带<Button-1>的引用作为参考。

您可以通过定义单独的函数来做到这一点:

class Applikation(Frame):
    def __init__(self, master):
        ...
        self.rssList.bind("<Button-1>", self.print_hi)

    def print_hi(self,event):
        print ("hi")

或使用lambda函数:

self.rssList.bind("<Button-1>", lambda e: print("Hi"))

答案 1 :(得分:0)

print()函数仅打印到控制台,而不打印到GUI。

我解决这个问题的方法是为Applikation类创建一个新方法,并在rssList.bind中调用它。

含义:

class Applikation(Frame): 
    def __init__(self, master):
        #everything else here is fine
        self.rssList.bind("<Button-1>", self.say_hi)

    def say_hi(self, default=None):
        self.rssList.insert(END, "Hi")
#Keep everything else here the same