从Tkinter中的combobox中获取所选值

时间:2015-07-07 09:18:42

标签: python combobox tkinter

我使用Tkinter在python中创建了一个简单的组合框,我想检索用户选择的值。搜索之后,我想我可以通过绑定一个选择事件并调用一个将使用类似box.get()的函数来完成此操作,但这不起作用。程序启动时,会自动调用该方法,并且它不会打印当前选择。当我从组合框中选择任何项目时,不会调用任何方法。以下是我的代码片段:

    self.box_value = StringVar()
    self.locationBox = Combobox(self.master, textvariable=self.box_value)
    self.locationBox.bind("<<ComboboxSelected>>", self.justamethod())
    self.locationBox['values'] = ('one', 'two', 'three')
    self.locationBox.current(0)

这是我从框中选择项目时应该调用的方法:

def justamethod (self):
    print("method is called")
    print (self.locationBox.get())

有人可以告诉我如何获得所选值吗?

编辑:我已经纠正了对justamethod的调用,在将詹姆斯肯特建议的框绑定到一个函数时删除括号。但现在我收到了这个错误:

TypeError:justamethod()只取1个参数(给定2个)

编辑2:我已经发布了解决此问题的方法。

谢谢。

2 个答案:

答案 0 :(得分:7)

我已经弄明白代码中的错误。

首先,正如James所说,当将justamethod绑定到组合框时,应该删除括号。

其次,关于类型错误,这是因为justamethod是一个事件处理程序,所以它应该采用两个参数,self和event,就像这样,

def justamethod (self, event): 

进行这些更改后,代码运行良好。

答案 1 :(得分:0)

from tkinter import *
from tkinter import ttk
from tkinter import messagebox



root = Tk()

root.geometry("400x400")
#^ width - heghit window :D


cmb = ttk.Combobox(root, width="10", values=("prova","ciao","come","stai"))
#cmb = Combobox

class TableDropDown(ttk.Combobox):
    def __init__(self, parent):
        self.current_table = tk.StringVar() # create variable for table
        ttk.Combobox.__init__(self, parent)#  init widget
        self.config(textvariable = self.current_table, state = "readonly", values = ["Customers", "Pets", "Invoices", "Prices"])
        self.current(0) # index of values for current table
        self.place(x = 50, y = 50, anchor = "w") # place drop down box 

def checkcmbo():

    if cmb.get() == "prova":
         messagebox.showinfo("What user choose", "you choose prova")

    elif cmb.get() == "ciao":
        messagebox.showinfo("What user choose", "you choose ciao")

    elif cmb.get() == "come":
        messagebox.showinfo("What user choose", "you choose come")

    elif cmb.get() == "stai":
        messagebox.showinfo("What user choose", "you choose stai")

    elif cmb.get() == "":
        messagebox.showinfo("nothing to show!", "you have to be choose something")




cmb.place(relx="0.1",rely="0.1")

btn = ttk.Button(root, text="Get Value",command=checkcmbo)
btn.place(relx="0.5",rely="0.1")

root.mainloop()