gpt4 book ai didi

python - 树形 View 鼠标位置python

转载 作者:行者123 更新时间:2023-12-02 21:04:25 28 4
gpt4 key购买 nike

我不太确定这个问题以前是否有人问过,因为它似乎太微不足道了,不太新鲜,但是我已经环顾四周一个小时了,还没有发现任何东西

我正在使用 ttk Treeview 来显示和分析表格。对于给定的函数,我希望能够识别双击的确切单元格(行和列)。虽然很容易找到行,但我找不到列,因为鼠标位置始终相对于屏幕显示,而不是相对于 winfo_pointerx() 的 Treeview。我也无法让 event.x 工作...

from Tkinter import *
import ttk
import utils

class AudiDataList():

def __init__(self, i_root, i_header, i_data, i_types):
self.root = i_root

f1 = ttk.Frame(root)
f1.pack()
t1 = ttk.Treeview(f1, columns=i_header, show="headings")
t1.pack()

for col in i_header:
t1.heading(col, text=col.title())
for item in i_data:
t1.insert('', 'end', values=item, tags = ('item',))
t1.tag_bind('item', "<Double-Button-1>", callback=lambda c=col: self.filter(t1, c, 0, i_types, i_header))

def filter(self, tree, col, descending, i_types, i_header):
print "Row: ", tree.focus()
print "X-position", tree.winfo_pointerx()
print "Column: ??? ",tree.identify_column(tree.winfo_pointerx())


header = ['col1', 'col2', 'col3']
datentypen = ['text', 'money', 'int']
data = [
('a', '1,00', 1) ,
('a', '2,00', 2) ,
('b', '12,10', 3) ,
('c', '2,10', 4) ,
('b', '3,00', 5)]

root = Tk()
Auditable = AudiDataList(root, header, data, datentypen)

root.mainloop()

非常感谢您的帮助。

最佳答案

您需要结合一些技巧来解决您的问题。

首先,您需要使用 winfo_pointerxy() 。这将返回一个元组 (x , y)包含鼠标指针相对于 tree 的坐标的根窗口。

然后您需要使用该元组的第一个元素 winfo_pointerxy()[0] ,调用 identify_column() 从中减去 winfo_rootx() 的方法(解决窗口移动问题)。

但是你需要小心,因为 winfo_pointerxy() 返回的元组类型为<type 'unicode'> 。例如,您需要 import re为了使用 re.sub() 这样您就可以替换 #1 形式的数据为整数1

这意味着您的filter()方法现在看起来像这样:

     def filter(self, tree, col, descending, i_types, i_header):               
print 'Row: {} & Column: {} '.format(re.sub('I00','',str(tree.identify_row(tree.winfo_pointerxy()[1]-tree.winfo_rooty()))),re.sub(r'#','',str(tree.identify_column(tree.winfo_pointerxy()[0]-tree.winfo_rootx()))))

完整程序

这是完整的程序:

'''
Created on Apr 24, 2016

@author: billal begueradj
'''
from Tkinter import *
import ttk
import re

class AudiDataList():

def __init__(self, i_root, i_header, i_data, i_types):
self.root = i_root

f1 = ttk.Frame(root)
f1.pack()
t1 = ttk.Treeview(f1, columns=i_header, show="headings")
t1.pack()

for col in i_header:
t1.heading(col, text=col.title())
for item in i_data:
t1.insert('', 'end', values=item, tags = ('item',))
t1.tag_bind('item', "<Double-Button-1>", callback=lambda c=col: self.filter(t1, c, 0, i_types, i_header))

def filter(self, tree, col, descending, i_types, i_header):
print 'Row: {} & Column: {} '.format(re.sub('I00','',str(tree.identify_row(tree.winfo_pointerxy()[1]-tree.winfo_rooty()))),re.sub(r'#','',str(tree.identify_column(tree.winfo_pointerxy()[0]-tree.winfo_rootx()))))

header = ['col1', 'col2', 'col3']
datentypen = ['text', 'money', 'int']
data = [
('a', '1,00', 1) ,
('a', '2,00', 2) ,
('b', '12,10', 3) ,
('c', '2,10', 4) ,
('b', '3,00', 5)]

root = Tk()
Auditable = AudiDataList(root, header, data, datentypen)

root.mainloop()

演示

这是运行程序的屏幕截图:

enter image description here

关于python - 树形 View 鼠标位置python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816625/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com