Example #1
0
 def __init__(self, parent, db):
     Frame.__init__(self)
     # Создание основных переменных
     self.db = db
     self.parent = parent
     self.loggined = False
     self.user = None
     # Создание основного фрейма
     self.auth = Frame()
     # Название
     self.label = Label(self.auth, text='Авторизация', font=("Courier", 44))
     self.label.pack()
     # Логин и пароль
     self.Login = StringVar()
     self.Password = StringVar()
     # Поле ввода для логина и пароля
     self.login = EntryWithPlaceholder(self.auth,
                                       'Логин',
                                       textvariable=self.Login,
                                       font=("Courier", 44))
     self.login.pack()
     self.password = EntryWithPlaceholder(self.auth,
                                          'Пароль',
                                          hideChar=True,
                                          textvariable=self.Password,
                                          font=("Courier", 44))
     self.password.pack(pady=15)
     # Кнопка подтверждения
     self.submit = HoverButton(self.auth,
                               text='Подтвердить',
                               font=("Courier", 44),
                               command=self.check,
                               activebackground='#00ff00')
     self.submit.pack(pady=(0, 15))
     # Кнопка для регистрации
     self.reg = HoverButton(self.auth,
                            text="Зарегистрироваться",
                            font=("Courier", 26),
                            command=self.register,
                            activebackground='#00ff00')
     self.reg.pack()
     # Изменение цвета
     self.label['bg'] = '#00ace6'
     for wid in self.parent.winfo_children():
         wid.configure(bg='#00ace6')
     self.auth.pack(pady=150)
Example #2
0
 def __init__(self, parent, db):
     # Задание основных переменных
     self.parent = parent
     self.db = db
     # Поле и скролл для таблицы
     self.text = Text(self.parent, wrap="none")
     self.vsb = Scrollbar(self.parent,
                          orient="vertical",
                          command=self.text.yview)
     # Кнопка возврата назад
     self.back = HoverButton(self.parent,
                             font=("Courier", 18),
                             text='Назад',
                             activebackground='#00ff00',
                             command=self.returnBack)
     self.back.pack(anchor=NW, padx=20, pady=20)
     # Основной фрейм
     self.mainPart = Frame(self.parent)
     # Переменная с логическим выражением
     self.inputInformation = StringVar()
     # Поле для ввода выражения
     self.inputField = EntryWithPlaceholder(
         self.mainPart,
         'Логическое выражение',
         textvariable=self.inputInformation,
         font=('Courier', 40),
         width=30)
     # Кнопка для построения таблицы истинности
     self.submit = HoverButton(self.mainPart,
                               font=('Courier', 30),
                               text='Построить',
                               activebackground='#00ff00',
                               command=self.buildTable)
     # Вывод поля и фрейма
     self.inputField.grid(row=0, column=0, columnspan=3, padx=25)
     self.submit.grid(row=0, column=4)
     self.mainPart.pack()
     # Изменение парметров окна
     self.parent.resizable(width=False, height=False)
     self.parent.attributes('-fullscreen', True)
     # Изменение цвета приложения
     for wid in self.parent.winfo_children():
         wid.configure(bg='#00ace6')
     self.parent["bg"] = '#00ace6'
     self.back["bg"] = "#e0e0e0"
Example #3
0
 def __init__(self, parent, db):
     self.parent = parent
     self.parent.title("Регистрация")
     self.db = db
     self.reg = Frame(self.parent)
     self.label = Label(self.reg, text='Регистрация', font=("Courier", 44))
     self.label.pack()
     self.label['bg'] = '#00ace6'
     self.Login = StringVar()
     self.Password = StringVar()
     self.login = EntryWithPlaceholder(self.reg,
                                       'Логин',
                                       font=("Courier", 44),
                                       textvariable=self.Login)
     self.login.pack()
     self.password = EntryWithPlaceholder(
         self.reg,
         'Пароль',
         font=("Courier", 44),
         hideChar=True,
         textvariable=self.Password,
     )
     self.password.pack(pady=15)
     self.submit = HoverButton(self.reg,
                               text='Подтвердить',
                               font=("Courier", 44),
                               command=lambda: self.addToDb(
                                   self.login.get(), self.password.get()),
                               activebackground='#00ff00')
     self.submit.pack()
     self.parent['bg'] = '#00ace6'
     self.parent.resizable(width=False, height=False)
     self.parent.attributes('-fullscreen', True)
     for wid in self.parent.winfo_children():
         wid.configure(bg='#00ace6')
     self.reg.pack(pady=150)
Example #4
0
class Registr(Frame):
    def __init__(self, parent, db):
        self.parent = parent
        self.parent.title("Регистрация")
        self.db = db
        self.reg = Frame(self.parent)
        self.label = Label(self.reg, text='Регистрация', font=("Courier", 44))
        self.label.pack()
        self.label['bg'] = '#00ace6'
        self.Login = StringVar()
        self.Password = StringVar()
        self.login = EntryWithPlaceholder(self.reg,
                                          'Логин',
                                          font=("Courier", 44),
                                          textvariable=self.Login)
        self.login.pack()
        self.password = EntryWithPlaceholder(
            self.reg,
            'Пароль',
            font=("Courier", 44),
            hideChar=True,
            textvariable=self.Password,
        )
        self.password.pack(pady=15)
        self.submit = HoverButton(self.reg,
                                  text='Подтвердить',
                                  font=("Courier", 44),
                                  command=lambda: self.addToDb(
                                      self.login.get(), self.password.get()),
                                  activebackground='#00ff00')
        self.submit.pack()
        self.parent['bg'] = '#00ace6'
        self.parent.resizable(width=False, height=False)
        self.parent.attributes('-fullscreen', True)
        for wid in self.parent.winfo_children():
            wid.configure(bg='#00ace6')
        self.reg.pack(pady=150)

    # Добавление в базу данных и проверха возможности добавления
    def addToDb(self, login, password):
        # Проверка что такого пользователя не существует
        if self.db.checkUserLogin(login):
            messagebox.showerror("Регистрация", "Пользователь уже существует")
            self.parent.attributes('-topmost', True)
            self.parent.update()
        else:
            # Создание записи
            self.parent.attributes('-topmost', True)
            self.parent.update()
            self.parent.destroy()
            self.db.insertData(login, password)
            messagebox.showinfo(
                "Регистрация",
                "Пользователь успешно зарегистрирован",
            )
Example #5
0
class TruthDiagram(Frame):
    def __init__(self, parent, db):
        # Задание основных переменных
        self.parent = parent
        self.db = db
        # Поле и скролл для таблицы
        self.text = Text(self.parent, wrap="none")
        self.vsb = Scrollbar(self.parent,
                             orient="vertical",
                             command=self.text.yview)
        # Кнопка возврата назад
        self.back = HoverButton(self.parent,
                                font=("Courier", 18),
                                text='Назад',
                                activebackground='#00ff00',
                                command=self.returnBack)
        self.back.pack(anchor=NW, padx=20, pady=20)
        # Основной фрейм
        self.mainPart = Frame(self.parent)
        # Переменная с логическим выражением
        self.inputInformation = StringVar()
        # Поле для ввода выражения
        self.inputField = EntryWithPlaceholder(
            self.mainPart,
            'Логическое выражение',
            textvariable=self.inputInformation,
            font=('Courier', 40),
            width=30)
        # Кнопка для построения таблицы истинности
        self.submit = HoverButton(self.mainPart,
                                  font=('Courier', 30),
                                  text='Построить',
                                  activebackground='#00ff00',
                                  command=self.buildTable)
        # Вывод поля и фрейма
        self.inputField.grid(row=0, column=0, columnspan=3, padx=25)
        self.submit.grid(row=0, column=4)
        self.mainPart.pack()
        # Изменение парметров окна
        self.parent.resizable(width=False, height=False)
        self.parent.attributes('-fullscreen', True)
        # Изменение цвета приложения
        for wid in self.parent.winfo_children():
            wid.configure(bg='#00ace6')
        self.parent["bg"] = '#00ace6'
        self.back["bg"] = "#e0e0e0"

    # Возврат назад
    def returnBack(self):
        self.parent.destroy()

    # Создание таблицы истинности
    def buildTable(self):
        # Попытка выполнить программу
        try:
            # Получение всех переменных из выражения
            variables = set()
            s = ''
            line = self.inputInformation.get()
            for i in line:
                if i == '+' or i == '*' or i == '!':
                    if s:
                        variables.add(s)
                        s = ''
                elif i == '(' or i == ')':
                    if s:
                        variables.add(s)
                        s = ''
                else:
                    s += i
            variables.add(s)
            variables = sorted(list(variables))
            # Текстовое поле со скроллом
            self.createText()
            # Вывод переменных
            for i in variables:
                label = Label(self.parent,
                              text="%s \t" % i,
                              font=("Courier", 20),
                              borderwidth=2,
                              relief="groove")
                self.text.window_create("end", window=label)
            label = Label(self.parent,
                          text="Res \t",
                          font=("Courier", 20),
                          borderwidth=2,
                          relief="groove")
            self.text.window_create("end", window=label)
            self.text.insert("end", "\n")
            # Заполнение таблицы
            for i in range(2**len(variables)):
                t = 2**(len(variables) - 1)
                val = []
                s = line
                # Заполнение таблицы 1 и 0
                while t > 0:
                    if (i // t) % 2 == 0:
                        label = Label(self.parent,
                                      text="0\t",
                                      font=("Courier", 20),
                                      borderwidth=2,
                                      relief="groove")
                        val.append(0)
                    else:
                        label = Label(self.parent,
                                      text="1\t",
                                      font=("Courier", 20),
                                      borderwidth=2,
                                      relief="groove")
                        val.append(1)
                    self.text.window_create("end", window=label)
                    t //= 2
                # Вычисление значения каждой строки
                s = line
                # Замена цифр на булевы функции
                for i in range(len(variables)):
                    if val[i]:
                        s = s.replace(variables[i], 'True')
                    else:
                        s = s.replace(variables[i], 'False')
                # Вычисление значений в скобках
                while '(' in s:
                    a = s.index('(')
                    b = s.index(')')
                    t = eval(s[a:b + 1])
                    if t:
                        s = s.replace(s[a:b + 1], 'True')
                    else:
                        s = s.replace(s[a:b + 1], 'False')
                # Замена обратных булевых функций
                s = s.replace('!True', 'False')
                s = s.replace('!False', 'True')
                # Выполнение строчки и вывод результата
                if eval(s):
                    label = Label(self.parent,
                                  text="1\t",
                                  font=("Courier", 20),
                                  borderwidth=2,
                                  relief="groove")
                else:
                    label = Label(self.parent,
                                  text="0\t",
                                  font=("Courier", 20),
                                  borderwidth=2,
                                  relief="groove")
                # Вывод строчки
                self.text.window_create("end", window=label)
                # Перенос строки
                self.text.insert("end", "\n")
            self.text.configure(state="disabled")
        # В случае ошибки
        except Exception:
            # Текстовое поле со скроллом
            self.createText()
            label = Label(self.parent,
                          text='Введите корректное выражение',
                          font=("Courier", 20))
            self.text.window_create("end", window=label)

    # Метод для создания поля для таблицы
    def createText(self):
        self.text.destroy()
        self.vsb.destroy()
        self.text = Text(self.parent, wrap="none")
        self.vsb = Scrollbar(self.parent,
                             orient="vertical",
                             command=self.text.yview)
        self.text.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.text.pack(fill="both", expand=True)
    def __init__(self, parent, db):
        # Объявление переменных
        self.parent = parent
        self.db = db
        self.font30 = ("Courier", 30)
        self.font20 = ("Courier", 20)

        # Основной фрейм
        self.mainPart = Frame(self.parent)
        # Переменные для ввода данных
        self.inputSystem = StringVar()
        self.inputValue = StringVar()
        self.outputSystem = StringVar()

        # Кнопка возврата назад
        self.back = HoverButton(self.parent,
                                font=("Courier", 18),
                                text='Назад',
                                activebackground='#00ff00',
                                command=self.returnBack)
        self.back.pack(anchor=NW, padx=20, pady=20)

        # Поле информации
        self.inputInformation = Label(
            self.mainPart,
            text="Число для перевода и его \n система счисления",
            font=self.font30)
        self.inputInformation["bg"] = '#00ace6'

        # Поле ответа
        self.outputInformation = Label(self.mainPart,
                                       text="Результат перевода",
                                       font=self.font30)
        self.outputInformation["bg"] = '#00ace6'

        # Место для ответа
        self.result = Label(self.mainPart,
                            text='Здесь будет результат',
                            font=self.font30)
        self.result["bg"] = '#00ace6'

        # Ввод исходной системы счисления
        self.inputNumeralSystem = EntryWithPlaceholder(
            self.mainPart,
            'Система счисления исходного числа (2-36)',
            textvariable=self.inputSystem,
            font=self.font20,
            width=40)

        # Ввод исходного числа
        self.inputNumber = EntryWithPlaceholder(self.mainPart,
                                                'Исходное число',
                                                textvariable=self.inputValue,
                                                font=self.font20,
                                                width=40)

        # Ввод выходной системы счисления
        self.outputNumeralSystem = EntryWithPlaceholder(
            self.mainPart,
            'Система счисления выходного числа (2-36)',
            textvariable=self.outputSystem,
            font=self.font20,
            width=40)

        # Кнопка для перевода
        self.submit = HoverButton(self.mainPart,
                                  font=self.font20,
                                  text='Перевести',
                                  activebackground='#00ff00',
                                  command=self.translate)

        # Растановка виджетов на экране
        self.inputInformation.grid(row=0,
                                   column=0,
                                   padx=(0, 120),
                                   pady=(100, 0))
        self.outputInformation.grid(row=0, column=1, pady=(100, 0))
        self.inputNumeralSystem.grid(row=1,
                                     column=0,
                                     ipady=20,
                                     padx=(0, 120),
                                     pady=(20, 30))
        self.outputNumeralSystem.grid(row=3,
                                      column=0,
                                      ipady=20,
                                      padx=(0, 120),
                                      pady=30)
        self.submit.grid(row=4, column=0, padx=(0, 100))
        self.inputNumber.grid(row=2, column=0, ipady=20, padx=(0, 120))
        self.result.grid(row=1, column=1, rowspan=3)
        self.mainPart.pack()

        # Изменение парметров окна
        self.parent.resizable(width=False, height=False)
        self.parent.attributes('-fullscreen', True)

        # Изменение цвета приложения
        for wid in self.parent.winfo_children():
            wid.configure(bg='#00ace6')
        self.parent["bg"] = '#00ace6'
        self.back["bg"] = "#e0e0e0"
class CalculatorSystemDigit(Frame):
    def __init__(self, parent, db):
        # Объявление переменных
        self.parent = parent
        self.db = db
        self.font30 = ("Courier", 30)
        self.font20 = ("Courier", 20)

        # Основной фрейм
        self.mainPart = Frame(self.parent)
        # Переменные для ввода данных
        self.inputSystem = StringVar()
        self.inputValue = StringVar()
        self.outputSystem = StringVar()

        # Кнопка возврата назад
        self.back = HoverButton(self.parent,
                                font=("Courier", 18),
                                text='Назад',
                                activebackground='#00ff00',
                                command=self.returnBack)
        self.back.pack(anchor=NW, padx=20, pady=20)

        # Поле информации
        self.inputInformation = Label(
            self.mainPart,
            text="Число для перевода и его \n система счисления",
            font=self.font30)
        self.inputInformation["bg"] = '#00ace6'

        # Поле ответа
        self.outputInformation = Label(self.mainPart,
                                       text="Результат перевода",
                                       font=self.font30)
        self.outputInformation["bg"] = '#00ace6'

        # Место для ответа
        self.result = Label(self.mainPart,
                            text='Здесь будет результат',
                            font=self.font30)
        self.result["bg"] = '#00ace6'

        # Ввод исходной системы счисления
        self.inputNumeralSystem = EntryWithPlaceholder(
            self.mainPart,
            'Система счисления исходного числа (2-36)',
            textvariable=self.inputSystem,
            font=self.font20,
            width=40)

        # Ввод исходного числа
        self.inputNumber = EntryWithPlaceholder(self.mainPart,
                                                'Исходное число',
                                                textvariable=self.inputValue,
                                                font=self.font20,
                                                width=40)

        # Ввод выходной системы счисления
        self.outputNumeralSystem = EntryWithPlaceholder(
            self.mainPart,
            'Система счисления выходного числа (2-36)',
            textvariable=self.outputSystem,
            font=self.font20,
            width=40)

        # Кнопка для перевода
        self.submit = HoverButton(self.mainPart,
                                  font=self.font20,
                                  text='Перевести',
                                  activebackground='#00ff00',
                                  command=self.translate)

        # Растановка виджетов на экране
        self.inputInformation.grid(row=0,
                                   column=0,
                                   padx=(0, 120),
                                   pady=(100, 0))
        self.outputInformation.grid(row=0, column=1, pady=(100, 0))
        self.inputNumeralSystem.grid(row=1,
                                     column=0,
                                     ipady=20,
                                     padx=(0, 120),
                                     pady=(20, 30))
        self.outputNumeralSystem.grid(row=3,
                                      column=0,
                                      ipady=20,
                                      padx=(0, 120),
                                      pady=30)
        self.submit.grid(row=4, column=0, padx=(0, 100))
        self.inputNumber.grid(row=2, column=0, ipady=20, padx=(0, 120))
        self.result.grid(row=1, column=1, rowspan=3)
        self.mainPart.pack()

        # Изменение парметров окна
        self.parent.resizable(width=False, height=False)
        self.parent.attributes('-fullscreen', True)

        # Изменение цвета приложения
        for wid in self.parent.winfo_children():
            wid.configure(bg='#00ace6')
        self.parent["bg"] = '#00ace6'
        self.back["bg"] = "#e0e0e0"

    # Возврат назад
    def returnBack(self):
        self.parent.destroy()

    # Перевод в другую систему счисления
    def translate(self):
        # Проверка валидности входной системы счисления
        if self.checkSystem(self.inputSystem.get(), self.result, 'исходной'):
            from_base = int(self.inputSystem.get())
        else:
            return
        num = self.inputValue.get()
        # Проверка валдиности исходного числа
        alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        if any([True for i in num if i not in alphabet]):
            self.result['text'] = 'Введите корректное число'
        elif any([True for i in num if alphabet.index(i) >= from_base]):
            self.result['text'] = 'Введите корректное число'
        # Проверка валидности выходной системы счисления
        if self.checkSystem(self.outputSystem.get(), self.result, 'выходной'):
            to_base = int(self.outputSystem.get())
        else:
            return
        # Перевод к десятичному числу
        n = int(num, from_base) if isinstance(num, str) else num
        # Перевод в новую систему счисления
        res = ""
        while n > 0:
            n, m = divmod(n, to_base)
            res += alphabet[m]
        # Запись результата
        s = ''
        res = res[::-1]
        for i in range(len(res)):
            if i % 30 == 0:
                s += '\n'
            s += res[i]
        self.result['text'] = s

    # Метод для проверки валидности числа
    def checkSystem(self, systemToCheck, label, errorText):
        s = 'Введите число\nот 2 до 36 в {}\nсистеме счисления'.format(
            errorText)
        # Если не число, то запись ошибку и вернуть ошибку
        if not systemToCheck.isdigit():
            label['text'] = s
            return False
        # Проверка что число от 2 до 36
        if int(systemToCheck) > 36 or int(systemToCheck) < 2:
            label['text'] = s
            return False
        # Если переводится в число и оно от 2 до 36
        return True
Example #8
0
class Authentication(Frame):
    def __init__(self, parent, db):
        Frame.__init__(self)
        # Создание основных переменных
        self.db = db
        self.parent = parent
        self.loggined = False
        self.user = None
        # Создание основного фрейма
        self.auth = Frame()
        # Название
        self.label = Label(self.auth, text='Авторизация', font=("Courier", 44))
        self.label.pack()
        # Логин и пароль
        self.Login = StringVar()
        self.Password = StringVar()
        # Поле ввода для логина и пароля
        self.login = EntryWithPlaceholder(self.auth,
                                          'Логин',
                                          textvariable=self.Login,
                                          font=("Courier", 44))
        self.login.pack()
        self.password = EntryWithPlaceholder(self.auth,
                                             'Пароль',
                                             hideChar=True,
                                             textvariable=self.Password,
                                             font=("Courier", 44))
        self.password.pack(pady=15)
        # Кнопка подтверждения
        self.submit = HoverButton(self.auth,
                                  text='Подтвердить',
                                  font=("Courier", 44),
                                  command=self.check,
                                  activebackground='#00ff00')
        self.submit.pack(pady=(0, 15))
        # Кнопка для регистрации
        self.reg = HoverButton(self.auth,
                               text="Зарегистрироваться",
                               font=("Courier", 26),
                               command=self.register,
                               activebackground='#00ff00')
        self.reg.pack()
        # Изменение цвета
        self.label['bg'] = '#00ace6'
        for wid in self.parent.winfo_children():
            wid.configure(bg='#00ace6')
        self.auth.pack(pady=150)

    # Проверка введенного логина и пароля
    def check(self):
        self.loggined, self.User = self.db.checkUser(self.Login.get(),
                                                     self.Password.get())
        if self.loggined:
            self.parent.destroy()
            self.parent = Tk()
            self.app = App(self.parent, self.db)
            self.parent.resizable(width=False, height=False)
            self.parent.attributes('-fullscreen', True)
            self.parent.mainloop()
        else:
            messagebox.showerror("Авторизация", "Неверный логин или пароль")

    # Создание окна регистрации
    def register(self):
        self.newWindow = Toplevel(self.parent)
        self.app = Registr(self.newWindow, self.db)