2017-03-31 20 views
0

ttk.Comboboxを作成しようとしています。ユーザーが1つの値を選択すると、ドロップダウンリストが消え、1秒間停止して結果を表示します。Tkinter、選択後に一時停止コンボボックス

いくつかの異なる場所でx.after(1000)を試しました。 GUIを開くと一時停止するか、ドロップダウンリストで一時停止するかのいずれかになります(つまり、ドロップダウンリストは1000ミリ秒まで消えません)。

値を選択してドロップダウンが消えてから一時停止することはできますか?

import tkinter as tk 
from tkinter import ttk 

class App(): 

    def __init__(self, root): 

     # Main Frame 
     frame = ttk.Frame(root) 
     frame.grid(column=0, row=0, sticky='WESN') 

     self.test_lf = ttk.LabelFrame(frame, text='Test') 
     self.test_lf.grid(column=0, row=0, padx=5, sticky='WE') 

     self.selection = tk.StringVar() 
     self.selection.trace('w', self.result) 

     options = ttk.Combobox(self.test_lf, textvariable=self.selection, width=10) 
     options['values'] = ('A', 'B', 'C') 
     options.grid(column=0, row=0, sticky='WE', columnspan=2) 
     # options.after(1000) # Pause when open 

     result_label = ttk.Label(self.test_lf, text='Result:') 
     result_label.grid(column=0, row=2, sticky='W') 

    def result(self, *args): 
     selection_value=self.selection.get() 
     selection_result = ttk.Label(self.test_lf, text=selection_value) 
     selection_result.grid(column=1, row=2) 
     # selection_result.after(1000) # Pause on drop down list 

root = tk.Tk() 
root.title('Sample') 
app = App(root) 
root.mainloop() 

答えて

0

あなたは正しい考えを持って、あなただけのafter方法に結果を表示するために実行するコードを与える必要があります。

import tkinter as tk 
from tkinter import ttk 

class App(ttk.Frame): 
    def __init__(self, root): 
     ttk.Frame.__init__(self, root) # this class is itself the main frame 

     self.test_lf = ttk.LabelFrame(self, text='Test') 
     self.test_lf.grid(column=0, row=0, padx=5, sticky='WE') 

     self.selection = tk.StringVar() 
     self.selection.trace('w', self.result) 

     options = ttk.Combobox(self.test_lf, textvariable=self.selection, width=10) 
     options['values'] = ('A', 'B', 'C') 
     options.grid(column=0, row=0, sticky='WE', columnspan=2) 

     result_label = ttk.Label(self.test_lf, text='Result:') 
     result_label.grid(column=0, row=2, sticky='W') 

     self.selection_result = ttk.Label(self.test_lf) 
     self.selection_result.grid(column=1, row=2) 

    def result(self, *args): 
     self.after(1000, self.show_result) 

    def show_result(self, *args): 
     selection_value=self.selection.get() 
     self.selection_result.config(text=selection_value) 

root = tk.Tk() 
root.title('Sample') 
app = App(root) 
app.grid(column=0, row=0, sticky='WESN') 
root.mainloop() 

私はまた何かが変化したときに、フレームをサブクラス化し、変数を更新し、新しいものを作成しないように、あなたが使用する必要がありますあなたのコードにいくつかの他の改善を行いました。

+0

ありがとうございました!これは私の問題を解決します。あなたのアドバイスに感謝します。 –

関連する問題