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()