所以我正在为自己做一个项目,我不是一个优秀的程序员或者其他什么,但是我想给OptionMenu类添加一些格式。在典型的tk中,您用一个列表调用optionmenu,然后它遍历该列表,生成各种.add_命令。i、 e
Button >>
Sword
Dagger
Axe
Great Sword
Great Axe
不过,我想做的是添加一个可视分隔符(不是tk默认的水平规则),通过一个“武器类”来区分这些项目
^{pr2}$很明显,分隔符不是可选的。所以我想我可以写一个新的类“myOptionMenu2”。我可以生成一个与tk的“OptionMenu”完全相同的小部件,但我不确定如何最好地实现实际菜单本身的绘制。在
如果它继承了tk的(MenuButton)类(像optionmenu那样),我假设是(?)我可以编写一个新的'add_separator()'函数,它将步进tk的默认add separator函数,我可以使用它来插入标签小部件
或者,我可以继承一个框架,省去了所有对tk菜单/菜单按钮编码的麻烦。但我不确定tk()是如何实现菜单的“顶层”框架的(没有边框、阴影等等),我在实际中看到的tk.py公司但我还是不确定我能理解它是如何实现的。在
我的总体愿望是这样引用它:
baseList = [
[1-hand,[sword,dagger,axe, ...]],
[2-hand,[Great Sword, Great Axe, ...]]
[ ..., [...]] #as needed
]
myOptionMenu2(master, a_parent_IntVar(), baseList)
然后让类绘制“按钮”,解析列表并处理单击。 任何帮助都将不胜感激。在
你在菜单上能做的事几乎没有回旋余地。您唯一的选项是tk菜单小部件提供的选项。例如,不能在菜单中添加标签。但是,您可以添加一个不执行任何操作的命令,它可以用作标签。在
还有一个问题是optionmenu实际上并不是一个隐藏的类。在tk(Tkinter是基于它构建的)中,option menu只是一个辅助函数,它构造了一个menubutton和一个menu。因此,根本没有办法重写
add_separator
方法。在也就是说,编写自己的类来创建menubutton和相关联的菜单是非常容易的。然后,您可以执行标准小部件允许您做的任何事情,例如使用不起作用的命令作为标签。在
下面是一个简单的例子:
你可以这样使用它:
^{pr2}$你也可以选择制作级联菜单。因此,下拉列表中会有“1-Hand”和“2-Hand”的条目,并且每个条目都有一个用于各种选项的菜单。您可以从上面的代码开始,而不是生成命令,您可以创建级联项。在
最后,您可以按照问题最后一部分中的建议,在顶层框架(将
overrideredirect
标志设置为True)中创建自己的菜单式对象。然后,您可以完全控制下拉列表的外观。例如,你可以嵌入一个画布,然后画出你想要的任何东西。不过,这个解决方案需要相当数量的代码。在相关问题 更多 >
编程相关推荐