【问题标题】:TKinter OptionMenu: How to get the selected choice?TKinter OptionMenu:如何获得选中的选项?
【发布时间】:2016-05-10 00:05:35
【问题描述】:

我是 Python 和 Tkinter 的新手,但我必须创建一个需要使用下拉菜单的简单表单。 我试图做这样的事情:

#!/usr/bin python
import sys

from Tkinter import *

# My frame for form
class simpleform_ap(Tk):

    def __init__(self,parent):
        Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()
        # Dropdown Menu
        optionList = ["Yes","No"]
        self.dropVar=StringVar()
        self.dropVar.set("Yes") # default choice
        self.dropMenu1 = OptionMenu(self, self.dropVar, *optionList)
        self.dropMenu1.grid(column=1,row=4)
        print self.dropVar.get()

def create_form(argv):
    form = simpleform_ap(None)
    form.title('My form')
    form.mainloop()

if __name__ == "__main__":
  create_form(sys.argv)

但是,我打印出来的始终是默认值,我从来没有得到我从下拉列表中选择的值。

我尝试对 StingVar 使用 .trace 方法来做这样的事情:

#!/usr/bin python
import sys
from Tkinter import *

# My frame for form
class simpleform_ap(Tk):

    def __init__(self,parent):
        Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()
        # Dropdown Menu
        optionList = ["Yes","No"]
        self.dropVar=StringVar()
        self.dropVar.set("Yes") # default choice
        self.dropMenu1 = OptionMenu(self, self.dropVar, *optionList)
        self.dropMenu1.grid(column=1,row=4)
        self.dropVar.trace("w",self.get_selection)
        print self.dropVar.get()


    def get_selection(self):
        print "Selected: "+ self.dropVar.get()

def create_form(argv):
    form = simpleform_ap(None)
    form.title('My form')
    form.mainloop()

if __name__ == "__main__":
    create_form(sys.argv)

但我收到以下错误:

Exception in Tkinter callback Traceback (most recent call last):
File "/usr/lib64/python2.6/lib-tk/Tkinter.py", line 1410, in __call__
    return self.func(*args) TypeError: get_selection() takes exactly 1 argument (4 given)

我做错了什么?

请注意,我不希望使用任何按钮来确认下拉菜单中的选择。

你能给点建议吗?

【问题讨论】:

    标签: python python-2.7 tkinter optionmenu


    【解决方案1】:

    OptionMenu 有一个内置的command 选项,它将menu 的当前状态提供给一个函数。看到这个:

    #!/usr/bin python
    import sys
    from Tkinter import *
    
    # My frame for form
    class simpleform_ap(Tk):
    
        def __init__(self,parent):
            Tk.__init__(self,parent)
            self.parent = parent
            self.initialize()
            self.grid()
    
        def initialize(self):
            # Dropdown Menu
            optionList = ["Yes","No"]
            self.dropVar=StringVar()
            self.dropVar.set("Yes") # default choice
            self.dropMenu1 = OptionMenu(self, self.dropVar, *optionList,
                                        command=self.func)
            self.dropMenu1.grid(column=1,row=4)
    
        def func(self,value):
            print value
    
    
    def create_form(argv):
        form = simpleform_ap(None)
        form.title('My form')
        form.mainloop()
    
    if __name__ == "__main__":
        create_form(sys.argv)
    

    这应该能如你所愿。

    【讨论】:

    • 非常感谢!你真的让我很开心:)
    猜你喜欢
    • 2019-07-04
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多