CurbStone_ 2023-02-21 10:44 采纳率: 80%
浏览 32

写的一个tkinter程序遇到了菜单方面的异常,如何解决?

再再补充:通过排查发现,是金山词霸造成的。那么新问题出现了:为何会这样,如何避免呢?试了几个windows应用,比如记事本、pycharm都是正常的。

再补充:我的PC是win10专业版。把程序打包后,让同事测试,发现win7、10、11下,菜单都是正常的。这表明不是代码的问题,而应该是环境里有某项冲突所致。而且,因为我的PC上,其他应用程序是正常的,这意味着什么呢?

补充:刚才克隆了别人的一个记事本程序,运行后发现也存在这个问题。他的代码也是只使用了command方式,未使用bind方式。
由此看来,是我PC的环境有问题?
=================================
我正在学习Python中。近期编写了一个tkinter程序,但是遇到一个菜单方面的异常:当点击菜单时,子菜单能出现,但是一但松开鼠标左键,菜单就消失了。不过如果一直按住左键,把光标移动到菜单项上再释放,功能可以正常实现。

代码反复查看过多次,网上也没找到同类问题。请各位指点。多谢

下面是那部分代码(完整代码太多,此处是Menu那部分)


```python

# menu开始
## 创建菜单栏
menubar = tk.Menu(root, type="menubar")
## 创建菜单栏的子菜单对象
menu_file = tk.Menu(menubar, tearoff=False, type="normal")
menu_edit = tk.Menu(menubar, tearoff=False, type="normal")
menu_about = tk.Menu(menubar, tearoff=False, type="normal")

menubar.add_cascade(label='文件', menu=menu_file)  # 把子菜单menu_file挂装到菜单栏
menubar.add_cascade(label='编辑', menu=menu_edit)  # 把子菜单menu_edit挂装到菜单栏
menu_file.add_command(label='导出当前页', command=exportRec)  # 在menu_file子菜单中添加命令项‘导出’
menu_file.add_command(label='退出', command=root.destroy)  # 在menu_file子菜单中添加命令项‘退出’
menu_file.add_separator()
menu_file.add_command(label="About", command=showAbout)  # 在子菜单menu_file中添加一个命令“显示关于信息弹窗”

menu_edit.add_command(label="添加记录", command=addRec)  # 在子菜单menu_edit上添加一个命令"添加记录"
# 把完成装配的菜单(窗帘),挂到root(墙)上去
root["menu"] = menubar
# menu完成

```

  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-02-21 11:01
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ

    根据你提供的代码,我没有看到明显的错误。可能是其他部分的代码影响到了菜单的正常显示。不过,有一种情况可以导致菜单在松开鼠标左键后消失,那就是你没有给菜单添加事件绑定,而只是使用了 command 属性添加了命令。

    菜单事件绑定应该使用 bind 方法,而不是 command 属性。你可以尝试给菜单添加绑定事件,看是否能解决这个问题。例如,在 menu_file 中添加以下代码:

    menu_file.bind("<ButtonRelease-1>", lambda event: menu_file.post(event.x_root, event.y_root))
    

    这将给 menu_file 菜单绑定一个事件,在鼠标左键松开后重新显示菜单。这个方法需要注意的是,它只能解决菜单消失的问题,无法解决在松开鼠标左键之前菜单无法响应的问题。

    如果这个方法没有解决你的问题,你可能需要检查其他部分的代码,特别是是否有代码在事件处理函数中阻止了菜单正常显示。

    评论

报告相同问题?

问题事件

  • 修改了问题 2月21日
  • 修改了问题 2月21日
  • 修改了问题 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 STM32F103C8T6使用标准库stm32f10x.h驱动ws2812
  • ¥20 我是数控机床电气工程师,主要是做840DSL与one,请问如何自学
  • ¥20 显示器休眠后重新唤醒出现蓝屏,蓝屏代码为DRIVER-POWER.STATE-FAILURE
  • ¥20 alt+tab怎么恢复到以前的模式
  • ¥15 来一个会抓包app支付链接的
  • ¥15 MMdetection安装
  • ¥15 STM32U535系列stop3模式进入和RTC唤醒
  • ¥15 如何提取全民K歌没下载过但播放过很多次的音频?
  • ¥15 树莓派运行detect.py
  • ¥15 pdfplumber提起文本内容如何过滤水印内容