Форум сайта python.su
Здраствутйе, прошу помощи. Есть первое окно и второе окно. В первом окне есть Combobox, есть 4 массива со списками. В другом окне есть 4 Radiobutton. Как отловить какой пункт был нажат во втором окне, чтобы в первом окне создать условие, какие должны списки загружаться в Combobox. Вот код:
def create_window_triangle(): def func_label_configure(): if lb_formulas.current() == 0: l_field_1.config(text="Довжина сторони (у см)") l_field_2.config(text="Довжина висоти (у см)") elif lb_formulas.current() == 1: l_field_1.config(text="Довжина першої сторони (у см)") l_field_2.config(text="Довжина другої сторони (у см)") l_field_3.config(text="Довжина третьої сторони (у см)") elif lb_formulas.current() == 2: l_field_1.config(text="Довжина першої сторони (у см)") l_field_2.config(text="Довжина другої сторони (у см)") l_field_3.config(text="Кут (у градусах)") elif lb_formulas.current() == 3: l_field_1.config(text="Довжина першої сторони (у см)") l_field_2.config(text="Довжина другої сторони (у см)") l_field_3.config(text="Довжина третьої сторони (у см)") l_field_4.config(text="Радіус ОПИСАНОГО кола (у градусах)") elif lb_formulas.current() == 4: l_field_1.config(text="Довжина першої сторони (у см)") l_field_2.config(text="Довжина другої сторони (у см)") l_field_3.config(text="Довжина третьої сторони (у см)") l_field_4.config(text="Радіус ВПИСАНОГО кола (у градусах)") else: l_field_1.config(text="") l_field_2.config(text="") l_field_3.config(text="") l_field_4.config(text="") def lb_formulas_selected(): if lb_formulas.current() == 0: l_title.config(text="Обрана формула \"{}\"".format(lb_formulas.get())) func_hide_sumbit() func_show_frm_1() func_show_frm_2() func_hide_frm_3() func_hide_frm_4() func_show_sumbit() func_show_clear() func_label_configure() elif lb_formulas.current() == 1: l_title.config(text="Обрана формула \"{}\"".format(lb_formulas.get())) func_hide_sumbit() func_show_frm_1() func_show_frm_2() func_show_frm_3() func_hide_frm_4() func_show_sumbit() func_show_clear() elif lb_formulas.current() == 2: l_title.config(text="Обрана формула \"{}\"".format(lb_formulas.get())) func_hide_sumbit() func_show_frm_1() func_show_frm_2() func_show_frm_3() func_hide_frm_4() func_show_sumbit() elif lb_formulas.current() == 3: l_title.config(text="Обрана формула \"{}\"".format(lb_formulas.get())) func_hide_sumbit() func_show_frm_1() func_show_frm_2() func_show_frm_3() func_show_frm_4() func_show_sumbit() func_show_clear() elif lb_formulas.current() == 4: l_title.config(text="Обрана формула \"{}\"".format(lb_formulas.get())) func_hide_sumbit() func_show_frm_1() func_show_frm_2() func_show_frm_3() func_show_frm_4() func_show_sumbit() func_show_clear() else: l_title.config(text="Спочатку оберіть формулу") func_label_configure() def func_clear(): e_field_1.delete("0", tk.END) e_field_2.delete("0", tk.END) e_field_3.delete("0", tk.END) e_field_4.delete("0", tk.END) mb.showinfo("Очищення полів", "Поля очищенні успішно") def func_triangle_toplevel(): def func_return_main(): window_toplevel.destroy() window.deiconify() return wt_rb_state window.withdraw() window_toplevel = tk.Toplevel() window_toplevel.focus_force() wintl_width = window_toplevel.winfo_screenwidth() wintl_height = window_toplevel.winfo_screenheight() wintl_width = wintl_width // 2 wintl_height = wintl_height // 2 wintl_width = wintl_width - 150 wintl_height = wintl_height - 200 wt_rb_state = tk.IntVar() wt_rb_state.set(0) window_toplevel['bg'] = '#ffffff' window_toplevel.title("Тип трикутника") window_toplevel.geometry("300x400+{}+{}".format(wintl_width, wintl_height)) window_toplevel.resizable(False, False) wt_l_title = tk.Label(window_toplevel, bg="#ffffff", font=14, text="Оберіть тип трикутника") wt_l_title.pack(pady=8) wt_rb_one = tk.Radiobutton(window_toplevel, anchor=tk.W, bg="#ffffff", text="Звичайний прямокутник", variable=wt_rb_state, value=0, width=35) wt_rb_one.pack(pady=8) wt_rb_two = tk.Radiobutton(window_toplevel, anchor=tk.W, bg="#ffffff", text="Прямокутний прямокутник", variable=wt_rb_state, value=1, width=35) wt_rb_two.pack(pady=8) wt_rb_three = tk.Radiobutton(window_toplevel, anchor=tk.W, bg="#ffffff", text="Рівнобедрений прямокутник", variable=wt_rb_state, value=2, width=35) wt_rb_three.pack(pady=8) wt_rb_four = tk.Radiobutton(window_toplevel, anchor=tk.W, bg="#ffffff", text="Рівносторонній прямокутник", variable=wt_rb_state, value=3, width=35) wt_rb_four.pack(pady=8) wt_btn_return = tk.Button(window_toplevel, text="ОК", command=func_return_main, width=10) wt_btn_return.place(x=212, y=365) window_toplevel.mainloop() def func_loading_formulas(): global wt_rb_state if wt_rb_state == 0: lb_formulas.config(values=lb_formulas_type_1) elif wt_rb_state == 1: lb_formulas.config(values=lb_formulas_type_2) elif wt_rb_state == 2: lb_formulas.config(values=lb_formulas_type_3) elif wt_rb_state == 3: lb_formulas.config(values=lb_formulas_type_4) else: lb_formulas.config(values=lb_formulas_type_1) def func_hide_frm_1(): frm_1.pack_forget() def func_show_frm_1(): frm_1.pack() def func_hide_frm_2(): frm_2.pack_forget() def func_show_frm_2(): frm_2.pack() def func_hide_frm_3(): frm_3.pack_forget() def func_show_frm_3(): frm_3.pack() def func_hide_frm_4(): frm_4.pack_forget() def func_show_frm_4(): frm_4.pack() def func_hide_answer(): l_answer.pack_forget() def func_show_answer(): l_answer.pack() def func_hide_sumbit(): btn_sumbit.pack_forget() def func_show_sumbit(): btn_sumbit.pack() def func_hide_clear(): btn_clear.place_forget() def func_show_clear(): btn_clear.place(x=10, y=595) def func_window_main_return(): window.destroy() create_window_main() def func_close_triangle_app(): dialog_quit = mb.askyesno(title="Вихід", message="Вийти з програми?") if dialog_quit: window.destroy() window = tk.Tk() win_width = window.winfo_screenwidth() win_height = window.winfo_screenheight() win_width = win_width // 2 win_height = win_height // 2 win_width = win_width - 300 # Половина ширини вікна win_height = win_height - 350 # Половина висоти вікна window['bg'] = '#fafafa' window.title("Площа трикутника") window.geometry("600x640+{}+{}".format(win_width, win_height)) window.resizable(False, False) lb_formulas_type_1 = ["За стороною і висотою", "За трьома сторонами", "За двома сторонами і кутом між ними", "За трьома сторонами і радіусом ОПИСАНОГО кола", "За трьома сторонами і радіусом ВПИСАНОГО кола"] lb_formulas_type_2 = ["Формула площі прямокутного трикутника"] lb_formulas_type_3 = ["За основою та бічною стороною", "За двома бічними сторонами та кутом між ними", "За основою, бічною стороною та кутом при вершині"] lb_formulas_type_4 = ["Через сторону та висоту", "Через сторону"] l_title = tk.Label(window, bg="#fafafa", font=24, text="Оберіть формулу", pady=15, anchor=tk.CENTER) l_title.pack() lb_formulas = ttk.Combobox(window, width=90, state="readonly") lb_formulas.pack(pady=4) func_loading_formulas() btn_sumbit_formula = tk.Button(window, text="Обрати", pady=3, width=79, command=lb_formulas_selected) btn_sumbit_formula.pack(pady=16) frm_1 = tk.Frame(window, bg="#fafafa", pady=16) frm_1.pack() l_field_1 = tk.Label(master=frm_1, bg="#fafafa", text="Мітка 1", pady=2, width=80, anchor=tk.W) l_field_1.pack() e_field_1 = tk.Entry(master=frm_1, borderwidth=2, width=92, relief=tk.SUNKEN) e_field_1.pack() frm_2 = tk.Frame(window, bg="#fafafa", pady=16) frm_2.pack() l_field_2 = tk.Label(master=frm_2, bg="#fafafa", text="Мітка 2", pady=2, width=80, anchor=tk.W) l_field_2.pack() e_field_2 = tk.Entry(master=frm_2, borderwidth=2, width=92, relief=tk.SUNKEN) e_field_2.pack() frm_3 = tk.Frame(window, bg="#fafafa", pady=16) frm_3.pack() l_field_3 = tk.Label(master=frm_3, bg="#fafafa", text="Мітка 3", pady=2, width=80, anchor=tk.W) l_field_3.pack() e_field_3 = tk.Entry(master=frm_3, borderwidth=2, width=92, relief=tk.SUNKEN) e_field_3.pack() frm_4 = tk.Frame(window, bg="#fafafa", pady=16) frm_4.pack() l_field_4 = tk.Label(master=frm_4, bg="#fafafa", text="Мітка 4", pady=2, width=80, anchor=tk.W) l_field_4.pack() e_field_4 = tk.Entry(master=frm_4, borderwidth=2, width=92, relief=tk.SUNKEN) e_field_4.pack() btn_sumbit = tk.Button(window, bg="#dbffcc", text="Обчислити", width=78, pady=3) btn_sumbit.pack(pady=30) l_answer = tk.Label(window, bg="#fafafa", text="Відповідь") l_answer.pack() btn_clear = tk.Button(window, text="Очистити поля", command=func_clear, pady=4) btn_clear.place(x=10, y=595) btn_type = tk.Button(window, text="Тип трикутника", pady=4, command=func_triangle_toplevel) btn_type.place(x=395, y=595) btn_return = tk.Button(window, text="Повернутися", command=func_window_main_return, pady=4) btn_return.place(x=505, y=595) func_hide_frm_1() func_hide_frm_2() func_hide_frm_3() func_hide_frm_4() func_hide_answer() func_hide_sumbit() func_hide_clear() window.protocol("WM_DELETE_WINDOW", func_close_triangle_app) window.mainloop()
Офлайн
введите еще одну эээ сущность ну котороя будет следить за состоянием этих двух окон
в ткинтере есть для этого таймер
ну и вобще в питоне мультитединг и мультипроцесинг
зы по поводу вашего кода
мне кажтся что вам было бы удомней использовать классы
Офлайн