【问题标题】:More concise way to configure tkinter option menu?配置 tkinter 选项菜单的更简洁方法?
【发布时间】:2013-06-08 00:24:44
【问题描述】:

我是python的初学者,通常如果我想在我的程序中添加选项菜单,我会做这样的事情。

from Tkinter import*
root=Tk()

mylist=['a','b','c']
var=StringVar(root)
var.set("Select status")
mymenu=OptionMenu(root,var,*mylist)
mymenu.pack()
mymenu.config(font=('calibri',(10)),bg='white',width=12)
mymenu['menu'].config(font=('calibri',(10)),bg='white')

root.mainloop()

它工作正常,但我想知道是否有任何更短的方法可以实现相同的结果,因为每个选项菜单都需要 7 行代码。我必须创建几个选项菜单,所以我正在寻找一种适当且更短的方法来做到这一点。

编辑: 有人指出要创建将生成选项菜单的功能。所以我尝试了这个,

from Tkinter import*

def Dropmenu(mylist,status):
    var=StringVar(root)
    var.set(status)
    mymenu=OptionMenu(root,var,*mylist)
    mymenu.pack(side=LEFT)
    mymenu.config(font=('calibri',(10)),bg='white',width=12)
    mymenu['menu'].config(font=('calibri',(10)),bg='white')

root=Tk()

Dropmenu(['a','b','c'],'Select')

root.mainloop()

但是现在,我如何处理“var”以便我可以获取用户选择的所有值?根据我的示例,所有选项菜单都将具有相同的“var”值,因此我无法获取用户为不同选项菜单所做的选择。

为了让事情更清楚,假设我有 2 个选项菜单

Dropmenu(['a','b','c'],'Select')
Dropmenu(['c','d','e'],'Select')

如果我使用

myvalue=var.get()

由于两个选项菜单具有相同的变量名称,我如何获取这两个值?

【问题讨论】:

  • 任何时候你有一个重复的任务,你的第一个想法应该是“我可以定义一个函数来简化这个吗?”

标签: python tkinter optionmenu


【解决方案1】:

如果你要创建多个具有相同配置的菜单,我会继承 OptionMenu 而不是定义一个函数:

from Tkinter import*

class MyOptionMenu(OptionMenu):
    def __init__(self, master, status, *options):
        self.var = StringVar(master)
        self.var.set(status)
        OptionMenu.__init__(self, master, self.var, *options)
        self.config(font=('calibri',(10)),bg='white',width=12)
        self['menu'].config(font=('calibri',(10)),bg='white')

root = Tk()
mymenu1 = MyOptionMenu(root, 'Select status', 'a','b','c')
mymenu2 = MyOptionMenu(root, 'Select another status', 'd','e','f')
mymenu1.pack()
mymenu2.pack()
root.mainloop()

在我的示例中,我假设唯一要更改的是选项,但如果每个实例都有自己的背景颜色或字体,那么您只需将其作为参数添加到 __init__ 方法.

【讨论】:

  • 设法通过 "(mymenu1.var).get()/(mymenu2.var).get()" 获取不同的 var 值非常感谢您的帮助
  • 嗨,关于如何将 options 变成例如一个列表?而不是仅仅将它们明确地写出来? @A.Rodas
  • @A. Rodas 是否可以将 options 输入作为列表,而不是单独给出它们?
猜你喜欢
  • 2023-01-25
  • 2014-11-22
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多