Tôi muốn tự động chọn mục đầu tiên trong hộp danh sách. Bằng cách chọn mục đầu tiên, ý tôi không chỉ đơn giản là mặc định cho mục đầu tiên hoặc đặt tiêu điểm vào nó. Tôi đã đạt được điều đó bằng cách làm self.listbox.select_set(0)
. Tôi muốn mục mặc định cũng được chọn . Nói cách khác, khi tôi chạy mã bên dưới, tôi muốn print(value)
in giá trị của lựa chọn mặc định. Nếu Châu Á được chọn từ menu tùy chọn, thì Nhật Bản sẽ tự động in ra bảng điều khiển. Nếu châu Phi, Nigeria nên in và Đức cho châu Âu.
Bất kỳ gợi ý nào về cách tôi có thể đạt được điều này? Cảm ơn.
from tkinter import *
from tkinter import ttk
import tkinter.messagebox
class App:
def __init__(self):
self.master = Tk()
self.di = {'Asia': ['Japan', 'China', 'Malaysia', 'India', 'Korea',
'Vietnam', 'Laos', 'Thailand', 'Singapore',
'Indonesia', 'Taiwan'],
'Europe': ['Germany', 'France', 'Switzerland'],
'Africa': ['Nigeria', 'Kenya', 'Ethiopia', 'Ghana',
'Congo', 'Senegal', 'Guinea', 'Mali', 'Cameroun',
'Benin', 'Tanzania', 'South Africa', 'Zimbabwe']}
self.variable_a = StringVar()
self.frame_optionmenu = ttk.Frame(self.master)
self.frame_optionmenu.pack()
options = sorted(self.di.keys())
self.optionmenu = ttk.OptionMenu(self.frame_optionmenu, self.variable_a, options[0], *options)
self.variable_a.set('Asia')
self.optionmenu.pack()
self.btn = ttk.Button(self.master, text="Submit", width=8, command=self.submit)
self.btn.pack()
self.frame_listbox = ttk.Frame(self.master)
self.frame_listbox.pack(side=RIGHT, fill=Y)
self.scrollbar = Scrollbar(self.frame_listbox )
self.scrollbar.pack(side=RIGHT, fill=Y)
self.listbox = Listbox(self.frame_listbox, selectmode=SINGLE, yscrollcommand=self.scrollbar.set)
self.variable_a.trace('w', self.updateoptions)
self.scrollbar.config(command=self.listbox.yview)
self.listbox.pack()
#Populate listbox
for each in self.di[self.variable_a.get()]:
self.listbox.insert(END, each)
self.listbox.select_set(0) #This only sets focus on the first item.
self.listbox.bind("<<ListboxSelect>>", self.OnSelect)
self.master.mainloop()
def updateoptions(self, *args):
#countries = self.di[self.variable_a.get()]
self.listbox.delete(0, 'end')
for each in self.di[self.variable_a.get()]:
self.listbox.insert(END, each)
self.listbox.select_set(0) #This only sets focus on the first item.
self.listbox.pack()
def submit(self, *args):
var = self.variable_a.get()
if messagebox.askokcancel("Selection", "Confirm selection: " + var):
print(var)
def OnSelect(self, event):
widget = event.widget
value = widget.get(widget.curselection()[0])
print(value)
App()
Chạy Python 3.4.1