Python 将函数绑定到treeview无法正常工作
我制作了ttk treeview,您可以在其中手动添加值。 我不会发布整个代码,因为它太大了。 我还做了一个函数,应该计算两列的乘法,并将结果放在第三列。我将两个事件绑定到它,使用ENTER键进行验证,并在单击其他单元格时进行验证。 出于某种原因,该程序只在按ENTER键时工作,而不使用FocusOut。它没有显示任何错误,只是不起作用。你知道有什么问题吗Python 将函数绑定到treeview无法正常工作,python,tkinter,Python,Tkinter,我制作了ttk treeview,您可以在其中手动添加值。 我不会发布整个代码,因为它太大了。 我还做了一个函数,应该计算两列的乘法,并将结果放在第三列。我将两个事件绑定到它,使用ENTER键进行验证,并在单击其他单元格时进行验证。 出于某种原因,该程序只在按ENTER键时工作,而不使用FocusOut。它没有显示任何错误,只是不起作用。你知道有什么问题吗 def TotalCost(event): try: SelectedRow = NewTree.selectio
def TotalCost(event):
try:
SelectedRow = NewTree.selection()[0]
Quantity=round(float(NewTree.item(SelectedRow,"values")[3]),2)
UnitCost=round(float(NewTree.item(SelectedRow,"values")[4]),2)
TotalCost=float(round(Quantity*UnitCost,2))
NewTree.set(SelectedRow, '#6', TotalCost)
except IndexError:
sys.exit()
pass
except ValueError:
Error=messagebox.showinfo("Error!","Please enter values for Planned Costs or Real Costs.")
sys.exit() #za resavalje greske
pass
NewTree.bind('<Return>', TotalCost) # validate with Enter
NewTree.bind('<FocusOut>', TotalCost) # validate when you click on other cell
下面是一个代码示例,用于说明绑定函数和不使用任何按钮调用函数。我已经使用了python 2.7
import Tkinter as tk
main=tk.Tk()
var=tk.StringVar()
def rockon(event):
try:
var.set(int(e1.get())+int(e2.get()))
except:
pass
e1=tk.Entry(main)
e1.place(x=10,y=10)
e1.insert(tk.END,0)
e1.bind('<FocusOut>',rockon) #either u press tab
e1.bind('<Leave>',rockon) #either u move out of the widget
e1.bind('<Return>',rockon) #or u press enter key, it goes into the function "rockon"
e2=tk.Entry(main)
e2.place(x=10,y=50)
e2.insert(tk.END,0)
e2.bind('<FocusOut>',rockon)
e2.bind('<Leave>',rockon)
e2.bind('<Return>',rockon)
label=tk.Label(main,textvariable=var) #we print the total of two entries in label without pressing any button
label.place(x=10,y=100)
main.mainloop()
我想你可能想参加这个活动。每当您在树状视图中选择一个项目时,无论您单击同一个项目还是其他项目,都会生成它 这里有一个小程序,它可以打印出你做事时生成的事件。运行它,看看这是否有用
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry('300x400')
NewTree = ttk.Treeview(root)
NewTree.grid()
NewTree.insert('', 'end', text='Widget One')
NewTree.insert('', 'end', text='Widget Two')
NewTree.insert('', 'end', text='Widget Three')
def callback(binding):
print('Callback from:', binding)
NewTree.bind('<Return>', lambda event: callback(binding='Return'))
NewTree.bind('<FocusOut>', lambda event: callback(binding='FocusOut'))
NewTree.bind('<<TreeviewSelect>>', lambda event: callback(binding='TreeviewSelect'))
NewTree.bind('<Leave>', lambda event: callback(binding='Leave'))
root.mainloop()
顺便说一下;Python中的命名约定说您应该只将类名大写。这完全取决于您,但如果您希望其他人理解您的代码,则遵守标准会有所帮助 谢谢,但是我用装订法做到了这一点,但是非常感谢!