###前提
・Comboboxを用いて日付(年/月/日)を選択し、存在しない日付(例:2020年2月31日)の時にmessagebox(showerror)を表示するプログラムを作成した。
・messageboxは、年/月/日の3つすべてのプルダウンを選択してから表示される。
OS:Windows 10
Pythonバージョン:3.5.4(64bit)
開発環境:Pycharm
###発生している問題・エラーメッセージ
タイトルの通り、存在しない日付を選択した時、messageboxが表示されるのと同時にトップレベルウィンドウが前に出てきてしまいます。
エラーメッセージ:特になし
###実現したい事
messageboxをサブウィンドウ上のままで表示できるようにしたい。
###該当のソースコード
Python
1import tkinter as tk 2import tkinter.ttk as ttk 3import datetime 4from tkinter import messagebox as mb 5 6# メインウィンドウの作成 7root = tk.Tk() 8root.title('Main') 9 10# サブウィンドウを表示したときにメインウィンドウを使用不可にする 11sd_win = None 12 13 14# サブウィンドウの生成 15def select_date(): 16 global sd_win 17 if sd_win is None or not sd_win.winfo_exists(): 18 sd_win = tk.Toplevel() 19 sd_win.title('Select Date') 20 21 label_date = tk.Label(sd_win, text=u'日付') 22 label_date.grid(row=2, column=0, padx=20, pady=10) 23 label_year = tk.Label(sd_win, text=u'年') 24 label_year.grid(row=2, column=4, padx=1) 25 label_month = tk.Label(sd_win, text=u'月') 26 label_month.grid(row=2, column=6, padx=1) 27 label_day = tk.Label(sd_win, text=u'日') 28 label_day.grid(row=2, column=8, padx=1) 29 30 # コンボボックスの作成 31 32 # 日付 33 # 年 34 year_cb = ttk.Combobox(sd_win, width=6, justify=tk.RIGHT) 35 year_cb.set('') 36 year_cb['values'] = tuple(range(1990, 2023)) 37 year_cb.grid(row=2, column=3, sticky=tk.E) 38 39 # 月 40 month_cb = ttk.Combobox(sd_win, width=3, justify=tk.RIGHT) 41 month_cb.set('') 42 month_cb['values'] = tuple(range(1, 13)) 43 month_cb.grid(row=2, column=5, sticky=tk.E) 44 45 # 日 46 day_cb = ttk.Combobox(sd_win, width=3, justify=tk.RIGHT) 47 day_cb.set('') 48 day_cb['values'] = tuple(range(1, 32)) 49 day_cb.grid(row=2, column=7, sticky=tk.E) 50 51 # 日付の確認 52 def check_date(y, m, d): 53 try: 54 # y, m, dすべて入力した時のみ 55 datetime.date(int(y), int(m), int(d)) 56 return True 57 except Exception: 58 return False 59 60 def get_item(event): 61 if not year_cb.get() or not month_cb.get() or not day_cb.get() \ 62 or check_date(year_cb.get(), month_cb.get(), day_cb.get()): 63 pass 64 elif Exception: 65 mb.showerror('警告', '日付選択のエラー') #サブウィンドウ上で表示されるようにしたい。 66 67 year_cb.bind('<<ComboboxSelected>>', get_item) 68 year_cb.bind('<Return>', get_item) 69 month_cb.bind('<<ComboboxSelected>>', get_item) 70 month_cb.bind('<Return>', get_item) 71 day_cb.bind('<<ComboboxSelected>>', get_item) 72 day_cb.bind('<Return>', get_item) 73 74 75# [日付選択]ボタン 76button_date_select = tk.Button(text='日付選択', command=select_date) 77button_date_select.grid() 78 79# 表示 80root.mainloop() 81
ご回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/23 08:15
2020/03/23 15:34
2020/03/24 00:42