web-dev-qa-db-ja.com

Python tkinterコンボボックス

値を表示するための「チェック」などのボタンなしで自分のコンボボックスの名前をクリックしたときにエントリを入力したい。どうやってやるの?

import tkinter as tk
from tkinter import ttk
import csv

root = tk.Tk()
cb = ttk.Combobox(root,state='readonly')
labName = ttk.Label(root,text='Names: ')
labTel = ttk.Label(root,text='TelNum:')
labCity = ttk.Label(root,text='City: ')
entTel = ttk.Entry(root,state='readonly')
entCity = ttk.Entry(root,state='readonly')

with open('file.csv','r',newline='') as file:
    reader = csv.reader(file,delimiter='\t')    


cb.grid(row=0,column=1)
labName.grid(row=0,column=0)
labTel.grid(row=1,column=0)
entTel.grid(row=1,column=1)
labCity.grid(row=2,column=0)
entCity.grid(row=2,column=1)
3
Thomas Caio

リストで要素を選択すると、bind()を使用して関数_on_select_を実行できます。

_cb.bind('<<ComboboxSelected>>', on_select)
_

この関数では、Entryを入力できます。


GitHubの古い例: combobox-get-selection

_#!/usr/bin/env python3

import tkinter as tk
import tkinter.ttk as ttk

# --- functions ---

def on_select(event=None):
    print('----------------------------')

    if event: # <-- this works only with bind because `command=` doesn't send event
        print("event.widget:", event.widget.get())

    for i, x in enumerate(all_comboboxes):
        print("all_comboboxes[%d]: %s" % (i, x.get()))

# --- main ---

root = tk.Tk()

all_comboboxes = []

cb = ttk.Combobox(root, values=("1", "2", "3", "4", "5"))
cb.set("1")
cb.pack()
cb.bind('<<ComboboxSelected>>', on_select)

all_comboboxes.append(cb)

cb = ttk.Combobox(root, values=("A", "B", "C", "D", "E"))
cb.set("A")
cb.pack()
cb.bind('<<ComboboxSelected>>', on_select)

all_comboboxes.append(cb)

b = tk.Button(root, text="Show all selections", command=on_select)
b.pack()

root.mainloop()
_

編集:

_if event:_の_on_select_行は、bind()を使用する場合にのみ機能します。これは、イベントに関する情報を使用して関数を実行するためです。 _command=_は引数なしで関数を実行し、次に_even=None_を設定し、次に_if event:_は常にFalseになります。

2
furas