Уведомления

Группа в Telegram: @pythonsu

#1 Март 11, 2023 06:34:38

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Соединение gui и исполняемого кода.

  1. https://www.pythonguis.com/tutorials/modelview-architecture/
    https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_model_view_controller.htm



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Март 11, 2023 06:34:56)

Офлайн

#2 Март 11, 2023 16:37:26

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  122  -
Профиль   Отправить e-mail  

Соединение gui и исполняемого кода.

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version