我正在尝试将列表框中的项目绑定到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()
答案 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