web-dev-qa-db-ja.com

Tkinterのコンボボックスから選択した値を取得する

python Tkinterを使用して簡単なコンボボックスを作成しました。ユーザーが選択した値を取得したいと思います。検索した後、選択イベントをバインドして、を呼び出すことでこれを実行できると思います。 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())

選択した値を取得する方法を教えてもらえますか?

編集:James Kentによって提案されたように、ボックスを関数にバインドするときに角かっこを削除することで、justamethodの呼び出しを修正しました。しかし今、私はこのエラーを受け取っています:

TypeError:justamethod()は正確に1つの引数を取ります(2つ指定)

編集2:私はこの問題の解決策を投稿しました。

ありがとうございました。

7
Dania

私はコードの何が問題なのかを理解しました。

まず、Jamesが言ったように、justamethodをコンボボックスにバインドするときは角かっこを削除する必要があります。

次に、型エラーに関しては、これはjustamethodがイベントハンドラーであるためです。したがって、次のように、selfとeventの2つのパラメーターを受け取る必要があります。

def justamethod (self, event): 

これらの変更を行った後、コードは正常に機能しています。

7
Dania
from tkinter import ttk
from tkinter import messagebox
from tkinter import Tk



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()
1
Machine