pysunred 发表于 2023-3-15 13:19:00

关于单击,双击事件的问题

你好,
我用tkinter导入了一个表格数据至treeview中
我现在已经实现了
单击一行数据,可以进行删除操作。
但是
我还想双击一行数据
弹出一个新的窗口(外部函数)
这个窗口导入了双击的这行数据
在新的窗口中,查看这行具体的数据,并能够修改。

我现在碰到两个问题
1、双击事件,会连带单击事件发生,在不安装其它的模块下如何检测是双击事件,还是单击事件?
2、因为双击事件是原窗口下发生的,属于内部函数,如何调用执行外部函数(新窗口)?

万分感谢高手的回答!!!!!

isdkz 发表于 2023-3-15 13:27:31

你好!

针对你的问题,我提供如下解决方案:

一、如何检测双击事件:
在Tkinter中,可以使用<Double-Button-1>来绑定双击事件,而使用<Button-1>来绑定单击事件。

当点击鼠标左键时,先执行单击事件,如果在短时间内再次点击鼠标左键,则会触发双击事件。

因此,在<Button-1>事件的回调函数中,可以使用after方法设置一个定时器,在一定时间内没有再次点击鼠标左键,则认为是单击事件,否则认为是双击事件。

以下是示例代码:

def on_single_click(event):
    # 设置一个500毫秒的定时器
    root.after(500, lambda: handle_click(event))

def on_double_click(event):
    # 取消之前设置的定时器
    root.after_cancel(root.after_id)
    handle_double_click(event)

def handle_click(event):
    # 处理单击事件
    pass

def handle_double_click(event):
    # 处理双击事件
    pass

root.bind('<Button-1>', on_single_click)
root.bind('<Double-Button-1>', on_double_click)


二、如何调用外部函数:

在内部函数中,可以使用global关键字来声明一个全局变量,在外部函数中定义这个变量并赋值,然后在内部函数中使用即可。

以下是示例代码:

def inner_func():
    global data
    # 使用全局变量data
    pass

def outer_func():
    # 定义并赋值全局变量data
    global data
    data = ...
    # 调用内部函数
    inner_func()


如果需要在内部函数中修改外部函数中的变量,可以使用nonlocal关键字来声明一个非局部变量。

以下是示例代码:

def outer_func():
    data = ...
    def inner_func():
      nonlocal data
      # 修改外部函数中的变量data
      data = ...
    inner_func()

pysunred 发表于 2023-3-15 13:32:28

isdkz 发表于 2023-3-15 13:27
你好!

针对你的问题,我提供如下解决方案:


感谢,第二个问题,是因为我在双击事件的函数时选返回变量值,再执行函数,无法执行
我刚试了
先执行外部函数(父级同级函数)再执行返回值是可以的。
感谢啊
第一个问题,我下午试下。

pysunred 发表于 2023-3-15 18:18:49

isdkz 发表于 2023-3-15 13:27
你好!

针对你的问题,我提供如下解决方案:


你好,我试了下那个双击事件,
仍然会触发单击事件
我想着用if语句来处理
但也没有成功
不过还是感谢你的热心帮助,
谢谢!!!
页: [1]
查看完整版本: 关于单击,双击事件的问题