Форум сайта python.su
Отредактировано AD0DE412 (Март 11, 2023 06:34:56)
Офлайн
urandart
И я не погу понять, какие процессы происходят в вашем коде в “объеденяющем пространстве”.
import re import tkinter as tk import tkinter.font as tkFont # интерфейс class Okno(tk.Tk): def __init__(self): # название окна super().__init__() self.title("PROBA") self.command = None self.sv_1 = tk.StringVar() self.sv_1.trace('w', lambda n, i, m: self._validate_sv(self.sv_1)) self.sv_2 = tk.StringVar() self.sv_2.trace('w', lambda n, i, m: self._validate_sv(self.sv_2)) self.Okn_1 = tk.Label() self.Okn_1["bd"] = "3px" self.Okn_1["relief"] = "sunken" ft = tkFont.Font(family='Times', size=18) self.Okn_1["font"] = ft self.Okn_1["bg"] = "white" self.Okn_1["fg"] = "red" self.Okn_1["justify"] = "center" self.Okn_1["text"] = "Первое число" self.Okn_1.grid(sticky=tk.NSEW, padx=5, pady=2) self.Okn_2 = tk.Entry(textvariable=self.sv_1,) self.Okn_2["borderwidth"] = "3px" ft = tkFont.Font(family='Times', size=18) self.Okn_2["font"] = ft self.Okn_2["fg"] = "#333333" self.Okn_2["justify"] = "center" self.Okn_2.grid(row=0, column=1, sticky=tk.NSEW, padx=5, pady=2) self.Okn_3 = tk.Label() self.Okn_3["borderwidth"] = "3px" self.Okn_3["relief"] = "sunken" ft = tkFont.Font(family='Times', size=18) self.Okn_3["font"] = ft self.Okn_3["bg"] = "white" self.Okn_3["fg"] = "red" self.Okn_3["justify"] = "center" self.Okn_3["text"] = "Второе число" self.Okn_3.grid(row=1, sticky=tk.NSEW, padx=5, pady=2) self.Okn_4 = tk.Entry(textvariable=self.sv_2,) self.Okn_4["borderwidth"] = "3px" ft = tkFont.Font(family='Times', size=18) self.Okn_4["font"] = ft self.Okn_4["fg"] = "black" self.Okn_4["justify"] = "center" self.Okn_4.grid(row=1, column=1, sticky=tk.NSEW, padx=5, pady=2) self.Okn_5 = tk.Label() self.Okn_5["borderwidth"] = "3px" self.Okn_5["relief"] = "sunken" ft = tkFont.Font(family='Times', size=18) self.Okn_5["font"] = ft self.Okn_5["bg"] = "white" self.Okn_5["fg"] = "green" self.Okn_5["justify"] = "center" self.Okn_5["text"] = "Сложить первое и второе число" self.Okn_5.grid(row=2, sticky=tk.NSEW, padx=5, pady=2) self.Okn_6 = tk.Label() self.Okn_6["borderwidth"] = "3px" self.Okn_6["relief"] = "sunken" ft = tkFont.Font(family='Times', size=18) self.Okn_6["font"] = ft self.Okn_6["bg"] = "white" self.Okn_6["fg"] = "black" self.Okn_6["justify"] = "center" self.Okn_6["text"] = "+ результат +" self.Okn_6.grid(row=2, column=1, sticky=tk.NSEW, padx=5, pady=2) self.Okn_7 = tk.Label() self.Okn_7["borderwidth"] = "3px" self.Okn_7["relief"] = "sunken" ft = tkFont.Font(family='Times', size=18) self.Okn_7["font"] = ft self.Okn_7["bg"] = "white" self.Okn_7["fg"] = "green" self.Okn_7["justify"] = "center" self.Okn_7["text"] = "Умножить первое и второе число" self.Okn_7.grid(row=3, sticky=tk.NSEW, padx=5, pady=5) self.Okn_8 = tk.Label() self.Okn_8["borderwidth"] = "3px" self.Okn_8["relief"] = "sunken" ft = tkFont.Font(family='Times', size=18) self.Okn_8["font"] = ft self.Okn_8["bg"] = "white" self.Okn_8["fg"] = "black" self.Okn_8["justify"] = "center" self.Okn_8["text"] = "* результат *" self.Okn_8.grid(row=3, column=1, sticky=tk.NSEW, padx=5, pady=5) def _validate_sv(self, sv): t = re.sub(r'^0+(?=\d)', '', sv.get()) sv.set(t) try: float(t) if self.command: self.command() except ValueError: sv.set(t[:-1]) if not t: self.clear_out() def _format_text(self, text): return re.sub(r'\.0$', '', text) # имеет методы(или команды) доступные для других def show_in_Okn_6(self, data): # этой командой показать в окне 6 self.Okn_6.config(text=self._format_text(str(data))) def show_in_Okn_8(self, data): # показать в окне 8 self.Okn_8.config(text=self._format_text(str(data))) def get_Okn_2(self): # вернуть данные из окна 2 return self.Okn_2.get() def get_Okn_4(self): # вернуть данные из окна 4 return self.Okn_4.get() def clear_out(self): # очистить вывод self.Okn_8.config(text='') self.Okn_6.config(text='') # процессор class Processor: def sum(self, a, b): return a + b def umn(self, a, b): return a * b # объединяющее пространство class Program: def __init__(self): self.app = Okno() self.pr = Processor() self.app.command = self.calculate def calculate(self): a = self.app.get_Okn_2() b = self.app.get_Okn_4() if all([a, b]): res_1 = self.pr.sum(float(a), float(b)) res_2 = self.pr.umn(float(a), float(b)) self.app.show_in_Okn_6(res_1) self.app.show_in_Okn_8(res_2) def run(self): self.app.mainloop() if __name__ == "__main__": Program().run()
Отредактировано xam1816 (Март 11, 2023 16:51:40)
Офлайн