我经常看到Tkinter应用程序在构造函数中使用tearoff=0
初始化Menu
小部件。
import tkinter as tk
root = tk.Tk()
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar, tearoff=0)
effbot.org's documentation for Menu
指定tearoff
的默认值为1,但它不解释该值的用途。
tearoff=
Default value is 1. (tearOff/TearOff)
tearoffcommand=
No default value. (tearOffCommand/TearOffCommand)
初始化tkinter Menu
窗口小部件时tearoff
属性有什么作用?
答案 0 :(得分:7)
official python docs承认他们对细节有点了解:
tkinter包是一个位于Tcl / Tk顶部的瘦对象层。要使用tkinter,您不需要编写Tcl代码,但是您需要查阅Tk文档,有时还需要参考Tcl文档。
Tk documentation for tearoff
为您提供了您正在寻找的内容:
撕裂允许您分离主窗口的菜单,创建浮动菜单。如果创建菜单,单击顶部菜单项时,顶部会显示虚线。如果单击这些虚线,菜单会撕下并浮动。
答案 1 :(得分:4)
在这里,您可以看到tkinter Menu
在后台找到代码。我不确定这会有多大用,但根据New Mexico Tech:
通常情况下,菜单可以被撕掉:选项列表中的第一个位置(位置0)被撕下元素占用,并且从位置1开始添加附加选项。如果设置了tearoff = 0 ,菜单没有撕下功能,从位置0开始添加选项。
答案 2 :(得分:0)
如果您要使用Windows测试浮动菜单,请尝试此操作。
from tkinter import *
import re
class HoverInfo(Menu):
def __init__(self, parent, text, command=None):
self._com = command
Menu.__init__(self,parent, tearoff=1)
if not isinstance(text, str):
raise TypeError('Trying to initialise a Hover Menu with a non string type: ' + text.__class__.__name__)
toktext=re.split('\n', text)
for t in toktext:
self.add_command(label = t)
self._displayed=False
self.master.bind("<Enter>",self.Display )
self.master.bind("<Leave>",self.Remove )
def __del__(self):
self.master.unbind("<Enter>")
self.master.unbind("<Leave>")
def Display(self,event):
if not self._displayed:
self._displayed=True
self.post(event.x_root, event.y_root)
if self._com != None:
self.master.unbind_all("<Return>")
self.master.bind_all("<Return>", self.Click)
def Remove(self, event):
if self._displayed:
self._displayed=False
self.unpost()
if self._com != None:
self.unbind_all("<Return>")
def Click(self, event):
self._com()
class MyApp(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.grid()
self.lbl = Label(self, text='testing')
self.lbl.grid()
self.hover = HoverInfo(self, 'while hovering press return \n for an exciting msg', self.HelloWorld)
def HelloWorld(self):
print('Hello World')
app = MyApp()
app.master.title('test')
app.mainloop()
此示例是Gogo的悬停类。 Display message when hovering over something with mouse cursor in Python
我将撕裂度设置为1即可看到浮动效果。
答案 3 :(得分:0)
默认情况下,菜单中的选择从第1个位置开始。如果将撕裂设置为1,则它将从第0个位置开始