鱼C论坛

 找回密码
 立即注册
查看: 1905|回复: 3

[已解决]关于单击,双击事件的问题

[复制链接]
发表于 2023-3-15 13:19:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

万分感谢高手的回答!!!!!
最佳答案
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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-15 13:32:28 | 显示全部楼层
isdkz 发表于 2023-3-15 13:27
你好!

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

感谢,第二个问题,是因为我在双击事件的函数时选返回变量值,再执行函数,无法执行
我刚试了
先执行外部函数(父级同级函数)再执行返回值是可以的。
感谢啊
第一个问题,我下午试下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-15 18:18:49 | 显示全部楼层
isdkz 发表于 2023-3-15 13:27
你好!

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

你好,我试了下那个双击事件,
仍然会触发单击事件
我想着用if语句来处理
但也没有成功
不过还是感谢你的热心帮助,
谢谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 07:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表