예제 #1
0
def init_gui():
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
예제 #2
0
class Authorization(QtWidgets.QMainWindow):
    def enter(self):
        login = self.ui.loginEdit.text()
        password = self.ui.passworEdit.text()

        if get_password(login) is None:
            QMessageBox.question(self, 'Error', 'Error', QMessageBox.Ok,
                                 QMessageBox.Ok)
        elif get_password(login).lower() == password.lower():
            self.user_window = User(login)
            self.user_window.show()
        elif get_password(login).lower() == (password.lower() + '~1'):
            self.w3 = Administrator(login)
            self.w3.show()
        else:
            QMessageBox.question(self, 'Error', 'Error', QMessageBox.Ok,
                                 QMessageBox.Ok)

    def exit(self):
        self.close()

    def registration(self):
        self.w2 = Account()
        self.w2.show()

    def __init__(self):
        super(Authorization, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.enter.clicked.connect(self.enter)
        self.ui.exit.clicked.connect(self.exit)
        self.ui.reg.clicked.connect(self.registration)
예제 #3
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.comboBox.currentIndexChanged.connect(self.updateLabel)
        self.ui.comboBox_2.currentIndexChanged.connect(self.updateLabel)
        self.ui.comboBox_3.currentIndexChanged.connect(self.updateLabel)
        self.ui.comboBox_4.currentIndexChanged.connect(self.updateLabel)
        self.ui.comboBox_5.currentIndexChanged.connect(self.updateLabel)
        self.ui.comboBox_6.currentIndexChanged.connect(self.updateLabel)

    def updateLabel(self):
        currentDataArr = [
            str(determineValue(self.ui.comboBox.currentText())),
            str(determineValue(self.ui.comboBox_2.currentText())),
            str(determineValue(self.ui.comboBox_3.currentText())),
            str(determineValue(self.ui.comboBox_4.currentText())),
            str(determineValue(self.ui.comboBox_5.currentText())),
            str(determineValue(self.ui.comboBox_6.currentText()))
        ]

        result = ''
        for i in range(len(currentDataArr)):
            if currentDataArr[i] == '-1':
                continue
            result = result + currentDataArr[i]

        self.ui.label.setText(result + " ohms")
예제 #4
0
class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.download_btn.clicked.connect(self.download)
        self.ui.get_lex.clicked.connect(self.analysis)

    def download(self):
        path = self.ui.pathfile.text()
        with open(path) as file:
            data = file.readlines()
        self.ui.listWidget.addItems(data)

    def analysis(self):
        lex_list = []
        for index in range(self.ui.listWidget.count()):
            for item_pair in lex_analysis(
                    self.ui.listWidget.item(index).text()):
                lex_list.append(item_pair)
        self.ui.tableWidget.setRowCount(len(lex_list))
        row = 1
        for lexem, lexem_type in lex_list:
            self.ui.tableWidget.setItem(row, 0,
                                        QtWidgets.QTableWidgetItem(lexem))
            self.ui.tableWidget.setItem(row, 1,
                                        QtWidgets.QTableWidgetItem(lexem_type))
            row += 1
예제 #5
0
class MatplotlibWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        #loadUi("design.ui", self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle("yet another title (im bad at names)")
        self.ui.MplWidget.canvas.axes.format_coord = lambda x, y: ""
        self.addToolBar(2, NavigationToolbar2QT(self.ui.MplWidget.canvas,
                                                self))
        self.ui.MplWidget.canvas.mpl_connect("motion_notify_event",
                                             self.handle_mouse_moved)
        self.draw_graph()

    def handle_mouse_moved(self, event):
        if event.xdata is not None and event.ydata is not None:
            #print(f"x: {event.xdata:.2f}, y: {event.ydata:.2f}")
            self.ui.statusbar.showMessage(
                f"x: {event.xdata:.2f}, y: {event.ydata:.2f}")

    def draw_graph(self):
        fq = randint(1, 100)
        ln = 100
        t = np.linspace(0, 1, ln)
        wave = np.cos(2 * np.pi * fq * t)

        self.ui.MplWidget.canvas.axes.clear()
        self.ui.MplWidget.canvas.axes.plot(wave)
        self.ui.MplWidget.canvas.draw()
예제 #6
0
class eitMain(QMainWindow):
    def __init__(self):
        super(eitMain, self).__init__()

        self.ui = Ui_MainWindow()  #Opens the main window.
        self.ui.setupUi(self)
        self.ui.searchBtn.clicked.connect(
            self.charSearch)  #this is the search button.
        self.ui.actionExit.triggered.connect(
            QApplication.quit)  #This is the quit option in the menu bar.

    def charSearch(
        self
    ):  #this passes the text from the search box to the later thing that actually searches.
        self.charName = self.ui.charSearch.text()
        esiFunction.charIntelSearch(self, eitMain)

    def noResults(
        self
    ):  #this is displayed if your search has no results, otherwise it would crash.
        noResults = QMessageBox()
        noResults.setIcon(QMessageBox.Information)
        noResults.setText("No Results Found.")
        noResults.setInformativeText(
            "Search must be exact.\n\nCase Sensitive.")
        noResults.setStandardButtons(QMessageBox.Ok)
        noResults.setWindowTitle("Error")
        noResults.exec_()
        self.ui.searchBtn.clicked.connect(self.charSearch)
예제 #7
0
class sayiTahmin    (QMainWindow):
    pc_sayi = random.randint(1, 100)
    flag = False
    kalan_hak = 4
    def __init__(self):
        super().__init__()
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowIcon(QIcon(":\icons/num.jpg"))
        self.ui.txt_kalanhak.setText(str(self.kalan_hak + 1))
        self.ui.txt_tahmin.returnPressed.connect(self.tahminet)
        self.ui.btn_yenioyun.clicked.connect(self.yeniOyun)

    def yeniOyun(self):
        self.kalan_hak=4
        self.flag=False
        self.ui.txt_sonuc.setText("Yeni Oyun Başladı")
        self.ui.txt_tahmin.setText("")
        self.ui.txt_kalanhak.setText(str(self.kalan_hak + 1))
        self.pc_sayi = random.randint(1, 100)

    def tahminet(self):


        try:
            girilenSayi = int(self.ui.txt_tahmin.text())
            if self.pc_sayi == int(girilenSayi):
                self.ui.txt_sonuc.setText("Tebrikler doğru bildiniz.. " + str(self.pc_sayi))
                self.flag = True
                self.ui.txt_tahmin.setText("")

                #self.yeniOyun()

            elif self.kalan_hak == 0:
                self.ui.txt_sonuc.setText(
                    "Son hakkında da bilemedin ve hakkın bitti.. Başka bir oyunda tekrar deneyin. \n Doğru sayi: " + str(
                        self.pc_sayi))
                self.ui.txt_tahmin.setText("")
                self.ui.txt_kalanhak.setText(str(self.kalan_hak))


            elif int(girilenSayi) > self.pc_sayi:
                self.ui.txt_sonuc.setText(
                    "Tekrar Deneyin.. İpucu: Daha küçük sayi girin.. ")
                # Kalan hakkınız: " + str(self.kalan_hak))
                self.kalan_hak -= 1
                self.ui.txt_kalanhak.setText(str(self.kalan_hak + 1))
                self.ui.txt_tahmin.setText("")

            else:
                self.ui.txt_sonuc.setText(
                    "Tekrar Deneyin.. İpucu: Daha büyük bir sayi girin..")
                # Kalan hakkınız: " + str(self.kalan_hak))
                self.kalan_hak -= 1
                self.ui.txt_kalanhak.setText(str(self.kalan_hak + 1))
                self.ui.txt_tahmin.setText("")
        except ValueError:
            self.ui.txt_sonuc.setText("Sayi giriniz..")
예제 #8
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.label.setText('Hello4!')
        self.ui.label.setFont(QtGui.QFont('SansSerif', 25))
        self.ui.label.setFixedHeight(50)
class interface(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.text=None
        self.scroll = QScrollArea()
        self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.ui.setupUi(self)
        self.grid = QGridLayout()
        self.ui.label.setLayout(self.grid)
        self.list_img=[]
        self.ui.pushButton.clicked.connect(self.search)
        #self.create_labels(self.list_img)
    def search(self):
        self.text=self.ui.textEdit.toPlainText()
        self.get_img_database(self.text)
        if (len(self.text)!=0):
            self.list_img = self.get_img_database(self.text)
            if (len(self.list_img)==0):
                QMessageBox.warning(self, 'Error', 'There is no image about search key')
            else:
                self.create_labels(self.list_img)
        else:
            QMessageBox.warning(self, 'Error', 'There is no search key')
    def location(self,i):
        y=int(i/4)
        x=int(i%4)
        return x,y
    def create_labels(self,list):
        for i in reversed(range(self.grid.count())):
            self.grid.itemAt(i).widget().setParent(None)
        for i in range(0,len(list)):
            label1=QLabel()
            label1.setAlignment(Qt.AlignCenter)
            req = Request(list[i],headers={'User-Agent': 'Mozilla/5.0'})
            url_data = urllib2.urlopen(req).read()
            self.pm = QPixmap() #.scaled(250, 250, Qt.KeepAspectRatio,Qt.SmoothTransformation)
            self.pm.loadFromData(url_data)
            label1.setPixmap(self.pm)
            x,y=self.location(i)
            self.grid.addWidget(label1, y, x)
    def get_img_database(self,key):
        cluster = MongoClient("mongodb+srv://muho:84437**[email protected]/muho?retryWrites=true&w=majority")
        db = cluster["muho"]
        collection = db["images"]
        regx = re.compile("{}".format(key), re.IGNORECASE)
        collections = collection.find({"caption": regx})
        url_list=[]
        for x in collections:
            if "https" in x["url"]:
                if (len(url_list)<20):
                    url_list.append(x['url'])
        return url_list
예제 #10
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.progressBar.setRange(0, 100)
        self.ui.progressBar.setValue(10)
        self.ui.horizontalSlider.setValue(35)
        self.ui.calendarWidget.setSelectedDate(QtCore.QDate(1993, 5, 5))
        self.ui.pushButton.clicked.connect(self.btn_click)

    def btn_click(self):
        self.ui.textEdit.setText("Button was clicked")
예제 #11
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.label.setFont(QtGui.QFont('SansSerif', 30))

        self.ui.label.setGeometry(QtCore.QRect(
            10, 10, 200, 200))  # изменить геометрию ярлыка
        self.ui.pushButton.clicked.connect(self.move_label)

    def _move_second_label(self):
        while True:
            x = self.ui.label.x()
            y = self.ui.label.y()

            rand_x = random.randint(-4, 4)
            rand_y = random.randint(-4, 4)

            self.ui.label.move(x + rand_x, y + rand_y)
            time.sleep(0.1)

    def _move_first_label(self):
        while True:
            x = self.ui.label_2.x()
            y = self.ui.label_2.y()

            rand_x = random.randint(-8, 8)
            rand_y = random.randint(-8, 8)

            self.ui.label_2.move(x + rand_x, y + rand_y)
            time.sleep(0.1)

    def _move_third_label(self):
        while True:
            x = self.ui.label_2.x()
            y = self.ui.label_2.y()

            rand_x = random.randint(-10, 10)
            rand_y = random.randint(-10, 10)

            self.ui.label_3.move(x + rand_x, y + rand_y)
            time.sleep(0.1)

    def move_label(self):
        threading.Thread(target=(self._move_first_label)).start()
        threading.Thread(target=(self._move_second_label)).start()
        threading.Thread(target=(self._move_third_label)).start()
예제 #12
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.mosStyleLable.setText("")
        self.ui.petStyleLabe.setText("")

        self.ui.splitBtn.clicked.connect(self.splitBtn_clicked)

    def splitBtn_clicked(self):
        self.ui.mosStyleLable.setText(
            MoscowSpliter(self.ui.inputTextField.toPlainText()))
        self.ui.petStyleLabe.setText(
            PeterSpliter(self.ui.inputTextField.toPlainText()))
예제 #13
0
class mywindow(QtWidgets.QMainWindow):

    def __init__(self):
        super(mywindow, self).__init__()
        self.mutex = threading.Lock()
        self.semaphore = threading.Semaphore()
        
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        self.ui.pushButton.clicked.connect(self.start_threads)

    def set_mutext_color(self, color):
        self.mutex.acquire()
        try:
    
            self.ui.mutex_label.setStyleSheet(f"background-color:{color};")
            time.sleep(0.1)        
        finally:
            self.mutex.release()    

    def set_semaphor_color(self, color):
        self.semaphore.acquire()
        try:
            self.ui.semaphor_label.setStyleSheet(f"background-color:{color};")
            time.sleep(0.1)        
        finally:
            self.semaphore.release()

    def start_mutext(self, color):
        while True:
            self.set_mutext_color(color)
            time.sleep(0.2)        

    def start_semaphor(self, color):
        while True:
            self.set_semaphor_color(color)
            time.sleep(0.1)        


    def start_threads(self):
        threading.Thread(target=self.start_mutext, args=('#0000FF', )).start()
        threading.Thread(target=self.start_mutext, args=('#ffff00',)).start()
        threading.Thread(target=self.start_mutext, args=('#000000', )).start()

        threading.Thread(target=self.start_semaphor, args=('#ffff00', )).start()
        threading.Thread(target=self.start_semaphor, args=('#0000FF', )).start()
        threading.Thread(target=self.start_semaphor, args=('#000000', )).start()
예제 #14
0
class Calculator(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.number_string = '0'
        # falta-me criar o grupo dos botões no designer
        for button in self.ui.digits.buttons():
            button.clicked.connect(self.add_digit)

        self.show()

    def add_digit(self):
        number = self.sender()
        self.ui.LCD.display(self.number_string)
예제 #15
0
class ApplicationWindow(QtWidgets.QMainWindow):
    signal = list()
    cur = 0
    flag = 1
    ran = 50

    def __init__(self):
        super(ApplicationWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.timer = QtCore.QTimer()
        self.timer.setInterval(10)
        self.timer.timeout.connect(self.pan)
        self.timer.start()

    def open_dialog_box(self):
        print("heelll")
        filename = QFileDialog.getOpenFileName()
        path = filename[0]
        signal = np.genfromtxt(path, delimiter=',')
        self.ui.plotWindow.plot(list(range(len(signal))), signal)
        self.ui.plotWindow.setXRange(self.cur, self.cur + self.ran)

    def pan(self):
        if not self.flag:
            self.ui.plotWindow.setXRange(self.cur, self.cur + self.ran)
            self.cur = self.cur + 0.1

    def play(self):
        self.flag = 0

    def pause(self):
        self.flag = 1

    def zoomin(self):
        self.ran = max(5, self.ran - 5)
        self.ui.plotWindow.setXRange(self.cur, self.cur + self.ran)

    def zoomout(self):
        self.ran = min(100, self.ran + 5)
        self.ui.plotWindow.setXRange(self.cur, self.cur + self.ran)
예제 #16
0
파일: qr.py 프로젝트: TNB86/QR
import pyqrcode
from PIL import Image
from PySide2.QtGui import QPixmap
from PySide2.QtWidgets import *
from pyzbar.pyzbar import decode

from design import Ui_MainWindow

# create app
app = QApplication()

# init
Window = QMainWindow(None)
ui = Ui_MainWindow()
ui.setupUi(Window)
Window.show()


# hook logic
def error():
    return ('H', 'Q', 'M', 'L')[ui.correction_level.currentIndex()]


def version():
    return ui.version.value()


def scale():
    return 177 / (21 + 4 * (version() - 1)) * 1.66
예제 #17
0
import os
예제 #18
0
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.figure = Figure()
        self.figureCanvas = FigureCanvas(self.figure)
        self.plotToolbar = NavigationToolbar(self.figureCanvas, self)
        self.data = StiffnessData()

    def setup_ui(self):
        self.ui.plotLayout.addWidget(self.figureCanvas)
        self.ui.plotLayout.addWidget(self.plotToolbar)
        self.setup_handlers()

    def setup_handlers(self):
        self.ui.setupBraketParametersBtn.clicked.connect(
            self.bracket_parameters_setup)
        self.ui.meshGenerateBtn.clicked.connect(self.mesh_parameters_setup)
        self.ui.setupLFparametersBtn.clicked.connect(
            self.load_fix_parameters_setup)
        self.ui.loadTypeBox.currentIndexChanged.connect(
            self.load_fix_box_type_changed)
        self.ui.fixTypeBox.currentIndexChanged.connect(
            self.load_fix_box_type_changed)

    def draw_plot(self):
        axis = self.figure.add_subplot(121) if len(
            self.figure.get_axes()) == 0 else self.figure.get_axes()[0]
        bracket = default_bracket.copy()
        bracket.append(bracket[0])
        bracket = np.array(bracket)
        axis.plot(bracket[:, 0], bracket[:, 1], c="blue")

    def draw_mesh(self):
        x = self.data.get_tri_x()
        y = self.data.get_tri_y()
        if x is not None and y is not None:
            axis = self.figure.get_axes()[0] if len(
                self.figure.get_axes()) > 0 else self.figure.add_subplot(121)
            axis.triplot(x, y, self.data.tri.simplices, c="lime")
            axis.plot(x, y, 'o')
            self.figure.canvas.draw()

    def calculate(self, p):
        if self.data.is_prepared():
            self.data.set_fixing(Node(default_bracket[0]))
            self.data.set_fixing(Node(default_bracket[1]))
            self.data.set_load(Node(default_bracket[2]), p)
            fg = Finite2DGenerator(self.data)
            moving = fg.calculate_moving()
            self.ui.resultText.setText(f"0 - {min(moving)}")
            fg.draw_displaced(
                self.figure.add_subplot(122) if len(self.figure.get_axes()) < 2
                else self.figure.get_axes()[1])
            self.figure.canvas.draw()
        else:
            self.show_popup("Ошибка", "Не введены необходимые данные")

    def bracket_parameters_setup(self):
        try:
            y = float(self.ui.youngaParameter.text())
            m = float(self.ui.poissonParameter.text())
            h = float(self.ui.thicknessParameter.text())
            self.ui.bracketParametersText.setText(f"""Параметры кронштейна:
Коэффициент Юнга: {y}
Коэффициент Пуассона: {m}
Толщина кронштейна: {h} мм""")
            self.data.poisson, self.data.young, self.data.thickness = m, y, float(
                h) / 1000.0
            self.draw_plot()
            self.ui.pageMesh.setEnabled(True)
        except ValueError:
            self.show_popup("Ошибка ввода", "Неккоректное число")

    def mesh_parameters_setup(self):
        try:
            size = float(self.ui.meshSizeInput.text())
            self.data.define_nodes_mesh(default_bracket.copy(), size)
            self.draw_mesh()
            self.setup_node_fix_load_info()
            self.set_checkable_boxes()
            val = float(self.ui.powerValue.text())
            self.calculate(val)
        except ValueError as e:
            self.show_popup("Ошибка ввода", "Неккоректное число",
                            QMessageBox.Critical, None, f"{e}\n{e}")

    def load_fix_parameters_setup(self):
        fix = self.ui.fixParametersBox.findChildren(QtWidgets.QCheckBox)
        load = self.ui.loadParametersBox.findChildren(QtWidgets.QCheckBox)
        fix_indexes = []
        load_indexes = []
        i = 0
        for f, l in zip(fix, load):
            if f.isEnabled() and f.isChecked():
                fix_indexes.append(self.define_node_edge(f.text(), i))
            if l.isEnabled() and l.isChecked():
                load_indexes.append(self.define_node_edge(l.text(), i))
            i += 1
        if self.check_fix_load_validate(fix_indexes, load_indexes):
            print(fix_indexes, load_indexes)

    @staticmethod
    def define_node_edge(text, default_value):
        for i in default_bracket:
            if text == f"{i}":
                return i
        return default_value

    def check_fix_load_validate(self, fix, load):
        valid = True
        if len(fix) == 0 or len(load) == 0:
            self.show_popup("Неверные данные",
                            "Не заданы закрепления или фиксация",
                            QMessageBox.Warning)
            valid = False
        elif len(fix) + len(load) > 3:
            self.show_popup("Неверные данные",
                            "Закрепления и фиксация заданны не корректно",
                            QMessageBox.Warning)
            valid = False
        elif len([e for e in fix if e in load]) > 0:
            self.show_popup("Неверные данные",
                            "Закрепления и фиксация совпадают",
                            QMessageBox.Warning)
            valid = False
        return valid

    def load_fix_box_type_changed(self):
        self.set_checkable_boxes()

    def set_checkable_boxes(self):
        if self.ui.fixTypeBox.currentIndex() == 0:
            self.enable_fix_node_checkboxes()
        else:
            self.enable_fix_node_checkboxes(False)
        if self.ui.loadTypeBox.currentIndex() == 0:
            self.enable_load_node_checkboxes()
        else:
            self.enable_load_node_checkboxes(False)

    def setup_node_fix_load_info(self):
        fix = self.ui.fixParametersBox.findChildren(QtWidgets.QCheckBox)[0:3]
        load = self.ui.loadParametersBox.findChildren(QtWidgets.QCheckBox)[0:3]
        index = 0
        for f, l in zip(fix, load):
            f.setText(f"{default_bracket[index]}")
            l.setText(f"{default_bracket[index]}")
            index += 1
        self.ui.bottomFixNodeCheckBox.setChecked(True)
        self.ui.leftFixNodeCheckBox.setChecked(True)
        self.ui.rightLoadNodeCheckBox.setChecked(True)

    def enable_fix_node_checkboxes(self, enable=True):
        self.enable_checkboxes(self.ui.fixParametersBox, 0, 3, enable)
        self.enable_checkboxes(self.ui.fixParametersBox, 3, 6, not enable)

    def enable_load_node_checkboxes(self, enable=True):
        self.enable_checkboxes(self.ui.loadParametersBox, 0, 3, enable)
        self.enable_checkboxes(self.ui.loadParametersBox, 3, 6, not enable)

    @staticmethod
    def enable_checkboxes(widget, i, j, enable):
        for w in widget.findChildren(QtWidgets.QCheckBox)[i:j]:
            w.setCheckable(enable)
            w.setEnabled(enable)

    @staticmethod
    def show_popup(title,
                   text,
                   icon=QMessageBox.Critical,
                   info=None,
                   details=None):
        msg = QMessageBox()
        msg.setWindowTitle(title)
        msg.setText(text)
        msg.setIcon(icon)
        if info is not None:
            msg.setInformativeText(info)
        if details is not None:
            msg.setDetailedText(details)
        return msg.exec_()
예제 #19
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.label_UserInf_Status.setText(get_YesNo(admin.pravchange))
        self.user = admin

        self.ui.pushButton_GenPass.clicked.connect(self.btnGenPass)
        self.ui.pushButton_SaveFile_Pass.clicked.connect(self.btnSaveFile_Pass)
        self.ui.pushButton_Shifr.clicked.connect(self.btnShifr)
        self.ui.pushButton_DeShifr.clicked.connect(self.btnDeShifr)
        self.ui.pushButton_SaveFile_Shifr.clicked.connect(
            self.btnSaveFile_Shifr)

        self.ui.lineEdit_Fraza.textChanged.connect(self.updateAllTwoChange)
        self.ui.lineEdit_Poradak_Stolb.textChanged.connect(
            self.updatePoradak_Stolb)
        self.ui.lineEdit_Poradak_Strok.textChanged.connect(
            self.updatePoradak_Strok)

        self.ui.checkBox_FilePravEdit_Ban.clicked.connect(
            lambda: self.btnCheckBox_StatusChange('ban'))
        self.ui.checkBox_FilePravEdit_Write.clicked.connect(
            lambda: self.btnCheckBox_StatusChange('write'))
        self.ui.checkBox_FilePravEdit_Read.clicked.connect(
            lambda: self.btnCheckBox_StatusChange('read'))
        self.ui.checkBox_FilePravEdit_Full.clicked.connect(
            lambda: self.btnCheckBox_StatusChange('full'))
        self.ui.checkBox_FilePravEdit_SendPrav.clicked.connect(
            lambda: self.btnCheckBox_StatusChange('sendprav'))

        self.ui.comboBox_UserInf_User.view().pressed.connect(
            self.updateSelectUser)
        self.ui.comboBox_ChangePrav_User.view().pressed.connect(
            self.updatePravSelectUser)
        self.ui.comboBox_ChangePrav_Type.view().pressed.connect(
            self.updatePravUser)
        self.ui.comboBox_FileLook_File.view().pressed.connect(
            self.updateListPrav)
        self.ui.comboBox_FilePravEdit_File.view().pressed.connect(
            self.updateSelectPravChangeFile)
        self.ui.comboBox_FilePravEdit_User.view().pressed.connect(
            self.updateSelectPravChangeUser)

        self.ui.label_FileLook_Ban.setText(get_YesNo(self.user.file1.ban))
        self.ui.label_FileLook_Write.setText(get_YesNo(self.user.file1.write))
        self.ui.label_FileLook_Read.setText(get_YesNo(self.user.file1.read))
        self.ui.label_FileLook_Full.setText(get_YesNo(self.user.file1.full))
        self.ui.label_FileLook_SendPrav.setText(
            get_YesNo(self.user.file1.sendprav))

        self.ui.comboBox_FilePravEdit_File.clear()
        if self.user.file1.sendprav or self.user.file1.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File1')
        if self.user.file2.sendprav or self.user.file1.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File2')
        if self.user.file3.sendprav or self.user.file1.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File3')
        if self.user.file4.sendprav or self.user.file1.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File4')

        self.ui.comboBox_FilePravEdit_User.setCurrentIndex(0)
        self.ui.comboBox_FilePravEdit_File.setCurrentIndex(0)
        filename = self.ui.comboBox_FilePravEdit_File.currentText()
        user = self.ui.comboBox_FilePravEdit_User.currentText()
        self.change_LookPravFile(self.get_FileName(user, filename))

        # self.ui.lineEdit_Fraza.setInputMask('XXXXXXXXXXXXXXXXXXXXXXXXX')
        self.ui.lineEdit_Poradak_Stolb.setInputMask('99999')
        self.ui.lineEdit_Poradak_Strok.setInputMask('99999')

        self.updateTableUserPrav()

        self.ui.tableWidget_Osn.setColumnWidth(0, 20)
        self.ui.tableWidget_Osn.setColumnWidth(1, 20)
        self.ui.tableWidget_Osn.setColumnWidth(2, 20)
        self.ui.tableWidget_Osn.setColumnWidth(3, 20)
        self.ui.tableWidget_Osn.setColumnWidth(4, 20)

        self.ui.tableWidget_Stolb.setColumnWidth(0, 20)
        self.ui.tableWidget_Stolb.setColumnWidth(1, 20)
        self.ui.tableWidget_Stolb.setColumnWidth(2, 20)
        self.ui.tableWidget_Stolb.setColumnWidth(3, 20)
        self.ui.tableWidget_Stolb.setColumnWidth(4, 20)

        self.ui.tableWidget_Strok.setColumnWidth(0, 20)
        self.ui.tableWidget_Strok.setColumnWidth(1, 20)
        self.ui.tableWidget_Strok.setColumnWidth(2, 20)
        self.ui.tableWidget_Strok.setColumnWidth(3, 20)
        self.ui.tableWidget_Strok.setColumnWidth(4, 20)

    def updatePoradak_Stolb(self):
        poradok_text_stolb = self.ui.lineEdit_Poradak_Stolb.text()
        if len(poradok_text_stolb) == 5:
            symbol_list = ['6', '7', '8', '9', '0']
            status = True
            for i, text in enumerate(symbol_list):
                if not poradok_text_stolb.find(text) == -1:
                    status = False
            if status:
                self.updateAllTwoChange()
            else:
                self.ui.lineEdit_Poradak_Stolb.setText('12345')
                error(
                    'Введите числа для задания порадка в диапазоне от 1 до 5!')
        else:
            self.ui.lineEdit_Poradak_Stolb.setText('12345')
            error('Заполните порядок столбцов!')

    def updatePoradak_Strok(self):
        poradok_text_stolb = self.ui.lineEdit_Poradak_Stolb.text()
        poradok_text_line = self.ui.lineEdit_Poradak_Strok.text()
        if len(poradok_text_line) == 5:
            symbol_list = ['6', '7', '8', '9', '0']
            status = True
            for i, text in enumerate(symbol_list):
                if not poradok_text_line.find(text) == -1:
                    status = False
            if status:
                self.updateAllTwoChange()
            else:
                self.ui.lineEdit_Poradak_Strok.setText('12345')
                error(
                    'Введите числа для задания порадка в диапазоне от 1 до 5!')
        else:
            self.ui.lineEdit_Poradak_Strok.setText('12345')
            error('Заполните порядок строк!')

    def updateAllTwoChange(self):
        poradok_text_stolb = self.ui.lineEdit_Poradak_Stolb.text()
        poradok_text_line = self.ui.lineEdit_Poradak_Strok.text()
        old_text = self.ui.lineEdit_Fraza.text().ljust(25, " ")
        twochange.list_text = []
        for i in range(5):
            twochange.list_text.append(old_text[i * 5:i * 5 + 5])

        for i, text in enumerate(twochange.list_text):
            j = 0
            for j in range(5):
                self.ui.tableWidget_Osn.setItem(
                    i, j, QTableWidgetItem(text[j:j + 1]))
                j += 1

        twochange.list_stolb = []
        for i, text in enumerate(twochange.list_text):
            new_text = ''
            for j in range(5):
                count = int(poradok_text_stolb[j:j + 1])
                new_text += text[count - 1:count]
            twochange.list_stolb.append(new_text)
        for i, text in enumerate(twochange.list_stolb):
            for j in range(5):
                self.ui.tableWidget_Stolb.setItem(
                    i, j, QTableWidgetItem(text[j:j + 1]))
                j += 1

        twochange.list_line = ['', '', '', '', '']
        for i in range(5):
            stroka_text = ''
            count = int(poradok_text_line[i:i + 1])
            for j, text in enumerate(twochange.list_stolb):
                stroka_text += text[count - 1:count]
            twochange.list_line[i] = stroka_text

        for i, text in enumerate(twochange.list_line):
            for j in range(5):
                self.ui.tableWidget_Strok.setItem(
                    i, j, QTableWidgetItem(text[j:j + 1]))
                j += 1

    def updateSelectPravChangeFile(self, index):
        item = self.ui.comboBox_FilePravEdit_File.model().itemFromIndex(
            index).row()
        self.ui.comboBox_FilePravEdit_File.setCurrentIndex(item)
        filename = self.ui.comboBox_FilePravEdit_File.currentText()
        user = self.ui.comboBox_FilePravEdit_User.currentText()
        self.change_LookPravFile(self.get_FileName(user, filename))

    def updateSelectPravChangeUser(self, index):
        self.ui.comboBox_FilePravEdit_File.clear()
        if self.user.file1.sendprav or self.user.file1.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File1')
        if self.user.file2.sendprav or self.user.file2.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File2')
        if self.user.file3.sendprav or self.user.file3.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File3')
        if self.user.file4.sendprav or self.user.file4.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File4')
        item = self.ui.comboBox_FilePravEdit_User.model().itemFromIndex(
            index).row()
        self.ui.comboBox_FilePravEdit_User.setCurrentIndex(item)
        filename = self.ui.comboBox_FilePravEdit_File.currentText()
        user = self.ui.comboBox_FilePravEdit_User.currentText()
        self.change_LookPravFile(self.get_FileName(user, filename))

    def updateSelectUser(self, index):
        item = self.ui.comboBox_UserInf_User.model().itemFromIndex(index).row()
        self.ui.comboBox_UserInf_User.setCurrentIndex(item)
        self.user = self.get_UserName(
            self.ui.comboBox_UserInf_User.currentText())

        self.ui.comboBox_FileLook_File.setCurrentIndex(0)
        self.ui.label_FileLook_Ban.setText(get_YesNo(self.user.file1.ban))
        self.ui.label_FileLook_Write.setText(get_YesNo(self.user.file1.write))
        self.ui.label_FileLook_Read.setText(get_YesNo(self.user.file1.read))
        self.ui.label_FileLook_Full.setText(get_YesNo(self.user.file1.full))
        self.ui.label_FileLook_SendPrav.setText(
            get_YesNo(self.user.file1.sendprav))

        self.ui.comboBox_FilePravEdit_User.setCurrentIndex(0)
        self.ui.comboBox_FilePravEdit_File.setCurrentIndex(0)

        if self.user.pravchange == True:
            self.ui.groupBox_ChangePrav.setVisible(True)
            self.ui.comboBox_ChangePrav_User.setCurrentIndex(0)
            self.ui.label_UserInf_Status.setText(
                get_YesNo(self.user.pravchange))
            self.ui.comboBox_ChangePrav_Type.setCurrentIndex(
                get_UserPrav(user1))
        else:
            self.ui.groupBox_ChangePrav.setVisible(False)
            self.ui.label_UserInf_Status.setText(
                get_YesNo(self.user.pravchange))

        self.ui.comboBox_FilePravEdit_File.setEnabled(True)
        self.ui.comboBox_FilePravEdit_User.setEnabled(True)

        self.ui.checkBox_FilePravEdit_Ban.setEnabled(True)
        self.ui.checkBox_FilePravEdit_Write.setEnabled(True)
        self.ui.checkBox_FilePravEdit_Read.setEnabled(True)
        self.ui.checkBox_FilePravEdit_Full.setEnabled(True)
        self.ui.checkBox_FilePravEdit_SendPrav.setEnabled(True)
        self.ui.comboBox_FilePravEdit_File.clear()
        if self.user.file1.sendprav or self.user.file1.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File1')
        if self.user.file2.sendprav or self.user.file2.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File2')
        if self.user.file3.sendprav or self.user.file3.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File3')
        if self.user.file4.sendprav or self.user.file4.full:
            self.ui.comboBox_FilePravEdit_File.addItem('File4')

        if self.ui.comboBox_FilePravEdit_File.currentText(
        ) and self.ui.comboBox_FilePravEdit_User.currentText():
            filename = self.ui.comboBox_FilePravEdit_File.currentText()
            user = self.ui.comboBox_FilePravEdit_User.currentText()
            self.change_LookPravFile(self.get_FileName(user, filename))
        else:
            self.ui.comboBox_FilePravEdit_File.setEnabled(False)
            self.ui.comboBox_FilePravEdit_User.setEnabled(False)
            self.ui.checkBox_FilePravEdit_Ban.setEnabled(False)
            self.ui.checkBox_FilePravEdit_Write.setEnabled(False)
            self.ui.checkBox_FilePravEdit_Read.setEnabled(False)
            self.ui.checkBox_FilePravEdit_Full.setEnabled(False)
            self.ui.checkBox_FilePravEdit_SendPrav.setEnabled(False)

    def updatePravSelectUser(self, index):
        # item = self.ui.comboBox_ChangePrav_User.model().itemFromIndex(index).row()
        # if item == 0:
        #     self.ui.comboBox_ChangePrav_Type.setCurrentIndex(get_UserPrav(user1))
        # elif item == 1:
        #     self.ui.comboBox_ChangePrav_Type.setCurrentIndex(get_UserPrav(user2))
        # elif item == 2:
        #     self.ui.comboBox_ChangePrav_Type.setCurrentIndex(get_UserPrav(user3))
        # elif item == 3:
        #     self.ui.comboBox_ChangePrav_Type.setCurrentIndex(get_UserPrav(user4))

        item = self.ui.comboBox_ChangePrav_User.model().itemFromIndex(
            index).row()
        self.ui.comboBox_ChangePrav_User.setCurrentIndex(item)
        self.ui.comboBox_ChangePrav_Type.setCurrentIndex(
            get_UserPrav(
                self.get_UserName(
                    self.ui.comboBox_ChangePrav_User.currentText())))

    def updatePravUser(self, index):
        def update_UserPrav(user, type):
            if type == 0:
                user.pravchange = True
            else:
                user.pravchange = False

        user = self.ui.comboBox_ChangePrav_User.currentText()
        item = self.ui.comboBox_ChangePrav_Type.model().itemFromIndex(
            index).row()
        if self.user.pravchange == True:
            update_UserPrav(self.get_UserName(user), item)
            self.ui.comboBox_ChangePrav_Type.setCurrentIndex(item)
            if self.user.user == user:
                self.ui.label_UserInf_Status.setText(
                    get_YesNo(self.user.pravchange))
                self.ui.groupBox_ChangePrav.setVisible(False)
            error(
                f'Права пользователя {user} на редактирование прав других пользователей изменены!'
            )
        else:
            error(f'Вы не можете изменять права!')

    def updateListPrav(self, index):
        item = self.ui.comboBox_FileLook_File.model().itemFromIndex(
            index).row()
        self.ui.comboBox_FileLook_File.setCurrentIndex(item)
        file = self.get_FileName(self.user,
                                 self.ui.comboBox_FileLook_File.currentText())
        self.ui.label_FileLook_Ban.setText(get_YesNo(file.ban))
        self.ui.label_FileLook_Write.setText(get_YesNo(file.write))
        self.ui.label_FileLook_Read.setText(get_YesNo(file.read))
        self.ui.label_FileLook_Full.setText(get_YesNo(file.full))
        self.ui.label_FileLook_SendPrav.setText(get_YesNo(file.sendprav))

    def btnCheckBox_StatusChange(self, param):
        def cheakPravForFile(file):
            if not file.ban and not file.full and not file.read and not file.write and not file.sendprav:
                file.ban = True
                self.ui.checkBox_FilePravEdit_Ban.setChecked(True)
                file.write = False
                self.ui.checkBox_FilePravEdit_Write.setChecked(False)
                file.read = False
                self.ui.checkBox_FilePravEdit_Read.setChecked(False)
                file.sendprav = False
                self.ui.checkBox_FilePravEdit_SendPrav.setChecked(False)
                file.full = False
                self.ui.checkBox_FilePravEdit_Full.setChecked(False)

        def get_PravStatusUser(file, param):
            if param == 'ban':
                return file.ban
            elif param == 'write':
                return file.write
            elif param == 'read':
                return file.read
            elif param == 'full':
                return file.full
            elif param == 'sendprav':
                return file.sendprav

        file = self.get_FileName(
            self.ui.comboBox_FilePravEdit_User.currentText(),
            self.ui.comboBox_FilePravEdit_File.currentText())

        status = get_PravStatusUser(file, param)

        if param == 'ban':
            if status:
                self.change_PravFile(file, False, True, True, True, True)
            else:
                self.change_PravFile(file, True, False, False, False, False)
        elif param == 'full':
            if status:
                self.change_PravFile(file, False, None, None, None, False)
            else:
                self.change_PravFile(file, False, True, True, True, True)
        elif param == 'write':
            if status:
                self.change_PravFile(file, False, False, None, None, None)
            else:
                self.change_PravFile(file, False, True, None, None, None)
        elif param == 'read':
            if status:
                self.change_PravFile(file, False, None, False, None, None)
            else:
                self.change_PravFile(file, False, None, True, None, None)
        elif param == 'sendprav':
            if status:
                self.change_PravFile(file, False, None, None, False, None)
            else:
                self.change_PravFile(file, False, None, None, True, None)
        cheakPravForFile(file)
        self.change_LookPicFile(self.user,
                                self.ui.comboBox_FileLook_File.currentText())
        self.updateTableUserPrav()

    # def cheakPravForFile(self, file):
    #     if not file.ban and not file.full and not file.read and not file.write and not file.sendprav:
    #         file.ban = True
    #         self.ui.checkBox_FilePravEdit_Ban.setChecked(True)
    #         file.write = False
    #         self.ui.checkBox_FilePravEdit_Write.setChecked(False)
    #         file.read = False
    #         self.ui.checkBox_FilePravEdit_Read.setChecked(False)
    #         file.sendprav = False
    #         self.ui.checkBox_FilePravEdit_SendPrav.setChecked(False)
    #         file.full = False
    #         self.ui.checkBox_FilePravEdit_Full.setChecked(False)

    def get_UserPravText(self, file):
        text = ''
        if file.ban:
            text = 'Полный запрет'
        elif file.full:
            text = 'Полный доступ'
        else:
            if file.read:
                text += 'Чтение'
            if file.write:
                if text != '':
                    text += ', '
                text += 'Запись'
            if file.sendprav:
                if text != '':
                    text += ', '
                text += 'Передача прав'

        if text == '':
            return 'Нет прав!'
        return text

    def updateTableUserPrav(self):
        i = 0
        userlist = [admin, user1, user2, user3, user4]
        for user in userlist:
            j = 0
            filelist = [user.file1, user.file2, user.file3, user.file4]
            for file in filelist:
                self.ui.tableWidget.setItem(
                    i, j, QTableWidgetItem(self.get_UserPravText(file)))
                j += 1
            i += 1

    def change_lookCheakBoxStatus(self, ban_status, write_status, read_status,
                                  full_status, sendprav_status):
        self.ui.checkBox_FilePravEdit_Ban.setChecked(ban_status)
        self.ui.checkBox_FilePravEdit_Write.setChecked(write_status)
        self.ui.checkBox_FilePravEdit_Read.setChecked(read_status)
        self.ui.checkBox_FilePravEdit_Full.setChecked(full_status)
        self.ui.checkBox_FilePravEdit_SendPrav.setChecked(sendprav_status)

    def btnChange(self):
        self.ui.pushButton_GenPass.clicked.connect(self.btnGenPass)
        self.ui.pushButton_SaveFile_Pass.clicked.connect(self.btnSaveFile_Pass)
        self.ui.pushButton_Shifr.clicked.connect(self.btnShifr)
        self.ui.pushButton_DeShifr.clicked.connect(self.btnDeShifr)
        self.ui.pushButton_SaveFile_Shifr.clicked.connect(
            self.btnSaveFile_Shifr)

    def btnGenPass(self):
        PassType = False
        if self.ui.comboBox_PassType.currentText() == 'Да':
            PassType = True
        passlist = genpassword(self.ui.spinBox.value(), PassType)
        self.ui.textEdit_PassList.setText(passlist)
        self.ui.pushButton_SaveFile_Pass.setEnabled(True)

    def btnSaveFile_Pass(self):
        if self.ui.textEdit_PassList.toPlainText() == '':
            error('Пароли не сгенерированны!')
        else:
            self.savefile_window = mywindow_savefile()
            if self.savefile_window.filename:
                with open(self.savefile_window.filename, 'w') as file:
                    file.write('{}'.format(
                        self.ui.textEdit_PassList.toPlainText()))

    def btnShifr(self):
        if self.ui.lineEdit_Key.text(
        ) == '' or self.ui.textEdit_Text.toPlainText() == '':
            error('Данные не заполнены!')
        else:
            print(self.ui.comboBox_shifrLang.currentText())
            print(self.ui.lineEdit_Key.text()[:1])
            text = self.ui.textEdit_Text.toPlainText().lower()
            key = self.ui.lineEdit_Key.text().lower()
            if self.ui.comboBox_shifrLang.currentText() == 'en':
                if cheaktext(text, tabula_recta_en) and cheaktext(
                        key, tabula_recta_en):
                    code = encrypt(key, text, tabula_recta_en)
                    self.ui.textEdit_Shifr.setText(code)
                    self.ui.pushButton_SaveFile_Shifr.setEnabled(True)
                else:
                    error('Неверно выбран язык!')
            elif self.ui.comboBox_shifrLang.currentText() == 'rus':
                if cheaktext(text, tabula_recta_rus) and cheaktext(
                        key, tabula_recta_rus):
                    code = encrypt(key, text, tabula_recta_rus)
                    self.ui.textEdit_Shifr.setText(code)
                    self.ui.pushButton_SaveFile_Shifr.setEnabled(True)
                else:
                    error('Неверно выбран язык!')

    def btnDeShifr(self):
        if self.ui.lineEdit_Key.text(
        ) == '' or self.ui.textEdit_Text.toPlainText() == '':
            error('Данные не заполнены!')
        else:
            print(self.ui.lineEdit_Key.text()[:1])
            text = self.ui.textEdit_Text.toPlainText().lower()
            key = self.ui.lineEdit_Key.text().lower()
            if self.ui.comboBox_shifrLang.currentText() == 'en':
                if cheaktext(text, tabula_recta_en) and cheaktext(
                        key, tabula_recta_en):
                    code = decrypt(key, text, tabula_recta_en)
                    self.ui.textEdit_Shifr.setText(code)
                    self.ui.pushButton_SaveFile_Shifr.setEnabled(True)
                else:
                    error('Неверно выбран язык!')
            elif self.ui.comboBox_shifrLang.currentText() == 'rus':
                if cheaktext(text, tabula_recta_rus) and cheaktext(
                        key, tabula_recta_rus):
                    code = decrypt(key, text, tabula_recta_rus)
                    self.ui.textEdit_Shifr.setText(code)
                    self.ui.pushButton_SaveFile_Shifr.setEnabled(True)
                else:
                    error('Неверно выбран язык!')

    def btnSaveFile_Shifr(self):
        if self.ui.textEdit_PassList.toPlainText() == '':
            error('Шифр не сгенерирован!')
        else:
            self.savefile_window = mywindow_savefile()
            if self.savefile_window.filename:
                with open(self.savefile_window.filename, 'w') as file:
                    file.write('{}'.format(
                        self.ui.textEdit_Shifr.toPlainText()))

    def get_UserName(self, user):
        if user == 'Admin':
            return admin
        elif user == 'User1':
            return user1
        elif user == 'User2':
            return user2
        elif user == 'User3':
            return user3
        elif user == 'User4':
            return user4
        else:
            return self.user

    def get_FileName(self, username, filename):
        if filename == 'File1':
            return self.get_UserName(username).file1
        elif filename == 'File2':
            return self.get_UserName(username).file2
        elif filename == 'File3':
            return self.get_UserName(username).file3
        elif filename == 'File4':
            return self.get_UserName(username).file4

    def get_PravStatusUser(self, file, param):
        if param == 'ban':
            return file.ban
        elif param == 'write':
            return file.write
        elif param == 'read':
            return file.read
        elif param == 'full':
            return file.full
        elif param == 'sendprav':
            return file.sendprav

    def change_LookPravFile(self, user):
        self.ui.checkBox_FilePravEdit_Ban.setChecked(user.ban)
        self.ui.checkBox_FilePravEdit_Write.setChecked(user.write)
        self.ui.checkBox_FilePravEdit_Read.setChecked(user.read)
        self.ui.checkBox_FilePravEdit_Full.setChecked(user.full)
        self.ui.checkBox_FilePravEdit_SendPrav.setChecked(user.sendprav)

    def change_LookPicFile(self, user, filename):
        file = self.get_FileName(user, filename)
        self.ui.label_FileLook_Ban.setText(get_YesNo(file.ban))
        self.ui.label_FileLook_Write.setText(get_YesNo(file.write))
        self.ui.label_FileLook_Read.setText(get_YesNo(file.read))
        self.ui.label_FileLook_Full.setText(get_YesNo(file.full))
        self.ui.label_FileLook_SendPrav.setText(get_YesNo(file.sendprav))

    def change_PravFile(self, user, ban, write, read, sendprav, full):
        if ban is not None:
            user.ban = ban
            self.ui.checkBox_FilePravEdit_Ban.setChecked(ban)
        if write is not None:
            user.write = write
            self.ui.checkBox_FilePravEdit_Write.setChecked(write)
        if read is not None:
            user.read = read
            self.ui.checkBox_FilePravEdit_Read.setChecked(read)
        if sendprav is not None:
            user.sendprav = sendprav
            self.ui.checkBox_FilePravEdit_SendPrav.setChecked(sendprav)
        if full is not None:
            user.full = full
            self.ui.checkBox_FilePravEdit_Full.setChecked(full)
예제 #20
0
파일: main.py 프로젝트: yhyan/lalr-parser
class parser(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setFixedSize(852, 671)
        self.setWindowTitle("LALR Parser")

        self.init()

        QtCore.QObject.connect(self.ui.action_Open,
                               QtCore.SIGNAL("triggered()"), self.open_file)
        self.ui.action_Exit.triggered.connect(self.exit_app)
        self.ui.display.clicked.connect(self.disp)
        self.ui.first.clicked.connect(self.disp_first)
        self.ui.lr1.clicked.connect(self.disp_lr1_states)
        self.ui.lalr.clicked.connect(self.disp_lalr_states)
        self.ui.parse_table.clicked.connect(self.disp_parse_table)
        self.ui.plainTextEdit.textChanged.connect(self.check_changed)
        self.ui.parse.clicked.connect(self.disp_parsing)
        self.ui.actionAuthor.triggered.connect(self.disp_author)

    def init(self):
        self.grammar = []
        self.augment_grammar = []
        self.first = {}
        self.term = []
        self.non_term = []
        self.states = []
        self.lalr_states = []
        self.parse_table = []
        State.state_count = -1
        lalrState.state_count = 0

    def check_changed(self):
        self.changed = True

    def open_file(self):
        file = QtGui.QFileDialog.getOpenFileName(self, 'Open Grammar file')
        if file != '':
            file = open(file, 'r')
            self.ui.plainTextEdit.setPlainText(file.read())
            file.close()
            self.ui.lineEdit.clear()
            self.ui.textBrowser.clear()

    def read_input(self):
        self.init()
        lines = self.ui.plainTextEdit.toPlainText()  #string
        lines_list = lines.split('\n')  #converting into list of lines

        try:
            for line in lines_list:
                line = line.replace(' ', '')

                if line != '':
                    line_list = line.split('->')

                    if line_list[0].isupper() and line_list[1] != '':
                        if '|' in line_list[1]:
                            prod_list = line_list[1].split('|')
                            for prod in prod_list:
                                self.grammar.append([line_list[0], prod])
                        else:
                            self.grammar.append(line_list)
                    else:
                        self.ui.textBrowser.clear()
                        self.ui.textBrowser.setText("Invalid grammar")
                        self.grammar = []

            if self.grammar != []:
                term_and_nonterm(self.grammar, self.term, self.non_term)
                calculate_first(self.grammar, self.first, self.term,
                                self.non_term)
                get_augmented(self.grammar, self.augment_grammar)
                find_states(self.states, self.augment_grammar, self.first,
                            self.term, self.non_term)
                combine_states(self.lalr_states, self.states)
                get_parse_table(self.parse_table, self.lalr_states,
                                self.augment_grammar)
                self.changed = False

        except (KeyError, IndexError):
            self.ui.textBrowser.clear()
            self.ui.textBrowser.setText("Invalid grammar")
            self.init()


############################         DISPLAY          ################################

    def disp(self):
        self.ui.textBrowser.clear()
        if self.grammar == [] or self.changed:
            self.read_input()

        if self.grammar != []:
            for prod in self.grammar:
                s = prod[0] + ' -> ' + prod[1] + '\n'
                self.ui.textBrowser.append(s)
            self.ui.textBrowser.append("\nNon Terminals : " +
                                       ' '.join(self.non_term) +
                                       "\nTerminals : " + ' '.join(self.term))

    def disp_first(self):
        if self.first == {} or self.changed:
            self.read_input()
        if self.first != {}:
            self.ui.textBrowser.clear()
            for nonterm in self.non_term:
                self.ui.textBrowser.append('First(' + nonterm + ') : ' +
                                           ' '.join(self.first[nonterm]) +
                                           '\n')

    def disp_lr1_states(self):
        if self.states == [] or self.changed:
            self.read_input()
        if self.states != []:
            self.ui.textBrowser.clear()
            self.ui.textBrowser.append(
                "Number of LR(1) states : " +
                str(self.states[len(self.states) - 1].state_num + 1))
            for state in self.states:
                self.ui.textBrowser.append(
                    '----------------------------------------------------------------'
                )
                if state.state_num == 0:
                    self.ui.textBrowser.append("\nI" + str(state.state_num) +
                                               ' : ' + '\n')
                else:
                    self.ui.textBrowser.append("\nI" + str(state.state_num) +
                                               ' : ' + ' goto ( I' +
                                               str(state.parent[0]) + " -> '" +
                                               str(state.parent[1]) + "' )\n")
                for item in state.state:
                    self.ui.textBrowser.append(item[0] + ' -> ' + item[1] +
                                               ' ,  [ ' + ' '.join(item[2]) +
                                               ' ]')
                if state.actions != {}:
                    self.ui.textBrowser.append('\nActions : ')
                    for k, v in state.actions.items():
                        self.ui.textBrowser.insertPlainText(
                            str(k) + ' -> ' + str(abs(v)) + '\t')

    def disp_lalr_states(self):
        if self.lalr_states == [] or self.changed:
            self.read_input()
        if self.lalr_states != []:
            self.ui.textBrowser.clear()
            self.ui.textBrowser.append("Number of LALR states : " +
                                       str(lalrState.state_count))
            for state in self.lalr_states:
                self.ui.textBrowser.append(
                    '----------------------------------------------------------------'
                )
                if state.state_num == 0:
                    self.ui.textBrowser.append("\nI" + str(state.state_num) +
                                               ' : ' + '\tGot by -> ' +
                                               str(state.parent_list) + '\n')
                else:
                    self.ui.textBrowser.append("\nI" + str(state.state_num) +
                                               ' : ' + ' goto ( I' +
                                               str(state.parent[0]) + " -> '" +
                                               str(state.parent[1]) + "' )" +
                                               '\tGot by -> ' +
                                               str(state.parent_list) + '\n')
                for item in state.state:
                    self.ui.textBrowser.append(item[0] + ' -> ' + item[1] +
                                               ' ,   [ ' + ' '.join(item[2]) +
                                               ' ]')
                if state.actions != {}:
                    self.ui.textBrowser.append('\nActions : ')
                    for k, v in state.actions.items():
                        self.ui.textBrowser.insertPlainText(
                            str(k) + ' -> ' + str(abs(v)) + '\t')

    def disp_parse_table(self):
        if self.grammar == [] or self.changed:
            self.read_input()

        if self.grammar != []:
            self.ui.textBrowser.clear()
            all_symb = []
            all_symb.extend(self.term)
            all_symb.append('$')
            all_symb.extend(self.non_term)
            if 'e' in all_symb:
                all_symb.remove('e')

            head = '{0:12}'.format(' ')
            for X in all_symb:
                head = head + '{0:12}'.format(X)
            self.ui.textBrowser.setText(head + '\n')
            s = '------------' * len(all_symb)
            self.ui.textBrowser.append(s)

            for index, state in enumerate(self.parse_table):
                line = '{0:<12}'.format(index)
                for X in all_symb:
                    if X in state.keys():
                        if X in self.non_term:
                            action = state[X]
                        else:
                            if state[X] > 0:
                                action = 's' + str(state[X])
                            elif state[X] < 0:
                                action = 'r' + str(abs(state[X]))
                            elif state[X] == 0:
                                action = 'accept'

                        line = line + '{0:<12}'.format(action)
                    else:
                        line = line + '{0:<12}'.format("")

                self.ui.textBrowser.append(line)
                self.ui.textBrowser.append(s)

    def disp_parsing(self):
        if self.grammar == [] or self.changed:
            self.read_input()
        if self.grammar != []:
            self.ui.textBrowser.clear()
            line_input = self.ui.lineEdit.text()
            self.parse(self.parse_table, self.augment_grammar, line_input)

    def parse(self, parse_table, augment_grammar, inpt):
        inpt = list(inpt + '$')
        stack = [0]
        a = inpt[0]
        try:
            head = '{0:40} {1:40} {2:40}'.format("Stack", "Input", "Actions")
            self.ui.textBrowser.setText(head)
            while True:
                string = '\n{0:<40} {1:<40} '.format(stack, ''.join(inpt))
                s = stack[len(stack) - 1]
                action = parse_table[s][a]
                if action > 0:
                    inpt.pop(0)
                    stack.append(action)
                    self.ui.textBrowser.append(string + 'Shift ' + a + '\n')
                    a = inpt[0]
                elif action < 0:
                    prod = augment_grammar[-action]
                    if prod[1] != 'e':
                        for i in prod[1]:
                            stack.pop()
                    t = stack[len(stack) - 1]
                    stack.append(parse_table[t][prod[0]])
                    self.ui.textBrowser.append(string + 'Reduce ' + prod[0] +
                                               ' -> ' + prod[1] + '\n')
                elif action == 0:
                    self.ui.textBrowser.append('ACCEPT\n')
                    break
        except KeyError:
            self.ui.textBrowser.append('\n\nERROR\n')

    def exit_app(self):
        QtGui.QApplication.quit()

    def disp_author(self):
        QtGui.QMessageBox.information(
            self, "About", "LALR PARSER\n\nAuthor:\n  Akshay Hebbar Y S\t",
            QtGui.QMessageBox.Ok)
예제 #21
0
class ControlWindow:
    def __init__(self):
        self.app = QtWidgets.QApplication(sys.argv)
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)
        self.cv_images = {}

        self.load_images()

        self.video_thread = VideoThread()
        self.video_thread.changePixmap.connect(lambda p: self.setVideoImage(p))
        self.video_thread.change_video_state.connect(
            lambda s: self.update_video_state(s))

        self.ui.video_play_button.clicked.connect(self.play_video)
        #self.ui.video_pause_button.clicked.connect(self.pause_video)
        self.ui.load_video_button.clicked.connect(
            lambda s: self.load_video("File"))
        self.ui.video_stop_button.clicked.connect(self.stop_video)

        self.ui.load_web_cam_button.clicked.connect(
            lambda s: self.load_video("Camera"))
        self.ui.image_feed.itemClicked.connect(self.listwidgetclicked)

    def listwidgetclicked(self, item):
        idx = id(item)
        print('video class member', self.video_thread.shirt_img)
        print('click {}'.format(idx), self.cv_images[idx].image)
        self.video_thread.shirt_img = self.cv_images[idx].image

    def load_images(self):
        path = "tshirt/"
        included_extensions = ['jpg', 'jpeg', 'bmp', 'png', 'gif']
        file_names = [
            fn for fn in os.listdir(path) if any(
                fn.endswith(ext) for ext in included_extensions)
        ]

        # shirt_img = self.load_shirt("tshirt/shirt1.png")

        self.cv_images = {}

        for i in file_names:
            image = self.load_shirt(path + i)
            item = QListWidgetItem()
            icon = QtGui.QIcon()
            # icon.addPixmap(QtGui.QPixmap(_fromUtf8(path+i)), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            icon.addPixmap(QtGui.QPixmap(path + i), QtGui.QIcon.Normal,
                           QtGui.QIcon.Off)
            item.setIcon(icon)
            self.cv_images[id(item)] = CvImages(path + i, image)
            self.ui.image_feed.addItem(item)

        #print('cv', self.cv_images)

    def load_shirt(self, img_path):
        img = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)

        assert img.shape[
            2] == 4, "shirt image : {} doesn't have alpha channel".format(
                img_path)
        alpha_channel = img[:, :, -1]

        # calculate extreme points of shirt
        x, y, w, h = cv2.boundingRect(alpha_channel)

        return img[y:y + h, x:x + w]

    def setVideoImage(self, p):
        p = QPixmap.fromImage(p)
        p = p.scaled(1200, 1200, Qt.KeepAspectRatio)
        self.ui.video_feed1.setPixmap(p)

    def setVideoOutput(self, p):
        p = QPixmap.fromImage(p)
        p = p.scaled(1000, 1000, Qt.KeepAspectRatio)
        self.ui.video_feed2.setPixmap(p)

    def load_video(self, video_source):
        global g_video_source
        if video_source == "Camera":
            g_video_source[0] = "Camera"
            self.ui.video_path_label.setText('')
            self.video_thread.start()
        else:
            g_video_source[0] = "File"

            options = QFileDialog.Options()
            fileName, _ = QFileDialog.getOpenFileName(
                self.MainWindow,
                "QFileDialog.getOpenFileName()",
                os.getcwd(),
                "All Files (*);;Avi Files (*.avi)",
                options=options)
            if fileName:
                self.ui.video_path_label.setText(fileName)
                self.video_thread.vid_path = fileName
                self.play_video()

    def run(self):
        self.MainWindow.show()
        sys.exit(self.app.exec_())

    def play_video(self):
        self.video_thread.vid_path = self.ui.video_path_label.text()
        self.video_thread.start()
        self.ui.video_play_button.setEnabled(False)

    def pause_video(self):
        global g_video_state
        if g_video_state[0] == "Paused":
            g_video_state[0] = "Playing"
        else:
            g_video_state[0] = "Paused"

    def stop_video(self):
        g_video_state[0] = "Stop"
        self.video_thread.video_state = "Stop"
        self.ui.video_play_button.setEnabled(True)

    def update_video_state(self, state):
        #print ("Update state", state)
        if state == "Stop":
            self.stop_video()
예제 #22
0
class MyWindow(QMainWindow):
    ########инициализация окна######
    def __init__(self):
        super(MyWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.initUI1()
        self.update()
    ###############################

    ###########настройка сигналов#####################
    def initUI1(self):
        self.ui.audit_month.clicked.connect(lambda: self.graf_tadjyk1(y1))
        self.ui.audit_week.clicked.connect(lambda: self.graf_tadjyk2(y2))
        self.ui.teach_week.clicked.connect(lambda: self.graf_tadjyk3())
        self.ui.teach_month.clicked.connect(lambda: self.graf_tadjyk4())
    ###############################

        
    #########функции создания графиков########################
    def graf_tadjyk1(self, y1):
        x1 = [i for i in range(1, 27)]
        y1 = np.array(y1)
        x1 = np.array(x1)
        plt.title("Процентные данные загруженности аудиторий на каждые 4 недели")
        plt.plot(x1, y1)
        plt.scatter(x1, y1)
        plt.grid()
        # plt.savefig("tadjyk1.png")
        plt.show()

    def graf_tadjyk2(self, y2):
        x2 = [i for i in range(1, 54)]
        y2 = np.array(y2)
        x2 = np.array(x2)
        plt.title("Процентные данные загруженности аудиторий на каждую неделю")
        plt.plot(x2, y2)
        plt.scatter(x2, y2)
        plt.grid()
        # plt.savefig("tadjyk2.png")
        plt.show()

    def graf_tadjyk3(self):
        lines = []
        labels = []
        number_of_colors = len(teacher_time)

        color = ["#" + ''.join([choice('0123456789ABCDEF') for j in range(6)])
                 for i in range(number_of_colors)]
        plt.title("Количество преподавателей в каждую неделю")
        for j, i in enumerate(teacher_time):
            x3 = teacher_time[i].keys()
            y3 = teacher_time[i].values()
            labels.append(i)
            a, = plt.plot(x3, y3, color=color[j])
            lines.append(a)
        plt.legend(lines, labels)

        plt.grid()
        # plt.savefig("tadjyk3.png")
        plt.show()

    def graf_tadjyk4(self):
        x4 = [l for l in range(1, 14)]
        y4 = []
        k = 0
        for i in range(1, 54):
            if i % 4 != 0:
                for j in teacher_time:
                    if i in teacher_time[j]:
                        k += teacher_time[j][i]
            else:
                y4.append(k)
                k = 0
        y4 = np.array(y4)
        x4 = np.array(x4)
        plt.title("Количество пар у преподавателей в месяц")
        plt.plot(x4, y4)
        plt.grid()
        plt.scatter(x4, y4)
        plt.show()
예제 #23
0
class parser(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setFixedSize(857, 716)
        self.setWindowTitle("LALR Parser")

        self.init()

        QtCore.QObject.connect(self.ui.action_Open, QtCore.SIGNAL("triggered()"), self.open_file)
        self.ui.action_Exit.triggered.connect(self.exit_app)
        self.ui.display.clicked.connect(self.disp)
        self.ui.first.clicked.connect(self.disp_first)
        self.ui.lr1.clicked.connect(self.disp_lr1_states)
        self.ui.lalr.clicked.connect(self.disp_lalr_states)
        self.ui.parse_table.clicked.connect(self.disp_parse_table)
        self.ui.plainTextEdit.textChanged.connect(self.check_changed)
        self.ui.parse.clicked.connect(self.disp_parsing)
        self.ui.actionAuthor.triggered.connect(self.disp_author)

    def init(self):
        self.grammar = []
        self.augment_grammar = []

        self.first = {}

        self.term = []
        self.non_term = []

        self.states = []
        self.lalr_states = []
        self.parse_table = []
        State.state_count = -1
        lalrState.state_count = 0

    def check_changed(self):
        self.changed = True

    def open_file(self):
        file = QtGui.QFileDialog.getOpenFileName(self, "Open Grammar file")
        file = open(file, "r")
        self.ui.plainTextEdit.setPlainText(file.read())
        file.close()
        self.ui.lineEdit.clear()
        self.ui.textBrowser.clear()

    def read_input(self):
        self.init()
        lines = self.ui.plainTextEdit.toPlainText()  # string
        lines_list = lines.split("\n")  # converting into list of lines

        try:
            for line in lines_list:
                line = line.replace(" ", "")

                if line != "":
                    line_list = line.split("->")

                    if line_list[0].isupper() and line_list[1] != "":
                        if "|" in line_list[1]:
                            prod_list = line_list[1].split("|")
                            for prod in prod_list:
                                self.grammar.append([line_list[0], prod])
                        else:
                            self.grammar.append(line_list)
                    else:
                        self.ui.textBrowser.clear()
                        self.ui.textBrowser.setText("Invalid grammar")
                        self.grammar = []

            if self.grammar != []:
                term_and_nonterm(self.grammar, self.term, self.non_term)
                calculate_first(self.grammar, self.first, self.term, self.non_term)
                get_augmented(self.grammar, self.augment_grammar)
                find_states(self.states, self.augment_grammar, self.first, self.term, self.non_term)
                combine_states(self.lalr_states, self.states)
                get_parse_table(self.parse_table, self.lalr_states, self.augment_grammar)
                self.changed = False

        except (KeyError, IndexError):
            self.ui.textBrowser.clear()
            self.ui.textBrowser.setText("Invalid grammar")
            self.init()

    ############################         DISPLAY          ################################

    def disp(self):
        self.ui.textBrowser.clear()
        if self.grammar == [] or self.changed:
            self.read_input()

        if self.grammar != []:
            for prod in self.grammar:
                s = prod[0] + " -> " + prod[1] + "\n"
                self.ui.textBrowser.append(s)
            self.ui.textBrowser.append(
                "\nNon Terminals : " + " ".join(self.non_term) + "\nTerminals : " + " ".join(self.term)
            )

    def disp_first(self):
        if self.first == {} or self.changed:
            self.read_input()
        if self.first != {}:
            self.ui.textBrowser.clear()
            for key, value in self.first.items():
                if key in self.non_term:
                    self.ui.textBrowser.append("First(" + key + ") : " + " ".join(value) + "\n")

    def disp_lr1_states(self):
        if self.states == [] or self.changed:
            self.read_input()
        if self.states != []:
            self.ui.textBrowser.clear()
            self.ui.textBrowser.append(
                "Number of LR(1) states : " + str(self.states[len(self.states) - 1].state_num + 1)
            )
            for state in self.states:
                self.ui.textBrowser.append("----------------------------------------------------------------")
                if state.state_num == 0:
                    self.ui.textBrowser.append("\nI" + str(state.state_num) + " : " + "\n")
                else:
                    self.ui.textBrowser.append(
                        "\nI"
                        + str(state.state_num)
                        + " : "
                        + " goto ( I"
                        + str(state.parent[0])
                        + " -> '"
                        + str(state.parent[1])
                        + "' )\n"
                    )
                for item in state.state:
                    self.ui.textBrowser.append(item[0] + " -> " + item[1] + " ,  [ " + " ".join(item[2]) + " ]")
                if state.actions != {}:
                    self.ui.textBrowser.append("\nActions : ")
                    for k, v in state.actions.items():
                        self.ui.textBrowser.insertPlainText(str(k) + " -> " + str(abs(v)) + "\t")

    def disp_lalr_states(self):
        if self.lalr_states == [] or self.changed:
            self.read_input()
        if self.lalr_states != []:
            self.ui.textBrowser.clear()
            self.ui.textBrowser.append("Number of LALR states : " + str(lalrState.state_count))
            for state in self.lalr_states:
                self.ui.textBrowser.append("----------------------------------------------------------------")
                if state.state_num == 0:
                    self.ui.textBrowser.append(
                        "\nI" + str(state.state_num) + " : " + "\tGot by -> " + str(state.parent_list) + "\n"
                    )
                else:
                    self.ui.textBrowser.append(
                        "\nI"
                        + str(state.state_num)
                        + " : "
                        + " goto ( I"
                        + str(state.parent[0])
                        + " -> '"
                        + str(state.parent[1])
                        + "' )"
                        + "\tGot by -> "
                        + str(state.parent_list)
                        + "\n"
                    )
                for item in state.state:
                    self.ui.textBrowser.append(item[0] + " -> " + item[1] + " ,   [ " + " ".join(item[2]) + " ]")
                if state.actions != {}:
                    self.ui.textBrowser.append("\nActions : ")
                    for k, v in state.actions.items():
                        self.ui.textBrowser.insertPlainText(str(k) + " -> " + str(abs(v)) + "\t")

    def disp_parse_table(self):
        if self.grammar == [] or self.changed:
            self.read_input()

        if self.grammar != []:
            self.ui.textBrowser.clear()
            all_symb = []
            all_symb.extend(self.term)
            all_symb.append("$")
            all_symb.extend(self.non_term)
            if "e" in all_symb:
                all_symb.remove("e")

            head = "{0:12}".format(" ")
            for X in all_symb:
                head = head + "{0:12}".format(X)
            self.ui.textBrowser.setText(head + "\n")
            s = "------------" * len(all_symb)
            self.ui.textBrowser.append(s)

            for index, state in enumerate(self.parse_table):
                line = "{0:<12}".format(index)
                for X in all_symb:
                    if X in state.keys():
                        if X in self.non_term:
                            action = state[X]
                        else:
                            if state[X] > 0:
                                action = "s" + str(state[X])
                            elif state[X] < 0:
                                action = "r" + str(abs(state[X]))
                            elif state[X] == 0:
                                action = "accept"

                        line = line + "{0:<12}".format(action)
                    else:
                        line = line + "{0:<12}".format("")

                self.ui.textBrowser.append(line)
                self.ui.textBrowser.append(s)

    def disp_parsing(self):
        if self.grammar == [] or self.changed:
            self.read_input()
        if self.grammar != []:
            self.ui.textBrowser.clear()
            line_input = self.ui.lineEdit.text()
            self.parse(self.parse_table, self.augment_grammar, line_input)

    def parse(self, parse_table, augment_grammar, inpt):
        inpt = list(inpt + "$")
        stack = [0]
        a = inpt[0]
        try:
            head = "{0:40} {1:40} {2:40}".format("Stack", "Input", "Actions")
            self.ui.textBrowser.setText(head)
            while True:
                string = "\n{0:<40} {1:<40} ".format(stack, "".join(inpt))
                s = stack[len(stack) - 1]
                action = parse_table[s][a]
                if action > 0:
                    inpt.pop(0)
                    stack.append(action)
                    self.ui.textBrowser.append(string + "Shift " + a + "\n")
                    a = inpt[0]
                elif action < 0:
                    prod = augment_grammar[-action]
                    if prod[1] != "e":
                        for i in range(len(prod[1])):
                            stack.pop()
                    t = stack[len(stack) - 1]
                    stack.append(parse_table[t][prod[0]])
                    self.ui.textBrowser.append(string + "Reduce " + prod[0] + " -> " + prod[1] + "\n")
                elif action == 0:
                    self.ui.textBrowser.append("ACCEPT\n")
                    break
        except KeyError:
            self.ui.textBrowser.append("\n\nERROR\n")

    def exit_app(self):
        QtGui.QApplication.quit()

    def disp_author(self):
        QtGui.QMessageBox.information(
            self,
            "About",
            "LALR PARSER\n\nAuthors:\n  Akshay Hebbar Y S\t\n  Bharath Kumar N B\t\n  Nikil Upadhyaya\t\n  Alok S\t",
            QtGui.QMessageBox.Ok,
        )
예제 #24
0
class parser(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self,parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setFixedSize(852, 671)
        self.setWindowTitle("LALR Parser")

        self.init()

        QtCore.QObject.connect(self.ui.action_Open,QtCore.SIGNAL("triggered()"),self.open_file)
        self.ui.action_Exit.triggered.connect(self.exit_app)
        self.ui.display.clicked.connect(self.disp)
        self.ui.first.clicked.connect(self.disp_first)
        self.ui.lr1.clicked.connect(self.disp_lr1_states)
        self.ui.lalr.clicked.connect(self.disp_lalr_states)
        self.ui.parse_table.clicked.connect(self.disp_parse_table)
        self.ui.plainTextEdit.textChanged.connect(self.check_changed)
        self.ui.parse.clicked.connect(self.disp_parsing)
        self.ui.actionAuthor.triggered.connect(self.disp_author)


    def init(self):
        self.grammar = []
        self.augment_grammar = []
        self.first = {}
        self.term = []
        self.non_term = []
        self.states = []
        self.lalr_states = []
        self.parse_table = []
        State.state_count = -1
        lalrState.state_count = 0

    def check_changed(self):
        self.changed = True


    def open_file(self):
        file = QtGui.QFileDialog.getOpenFileName(self,'Open Grammar file')
        if file != '':
            file = open(file,'r')
            self.ui.plainTextEdit.setPlainText(file.read())
            file.close()
            self.ui.lineEdit.clear()
            self.ui.textBrowser.clear()


    def read_input(self):
        self.init()
        lines = self.ui.plainTextEdit.toPlainText()         #string
        lines_list = lines.split('\n')                      #converting into list of lines

        try:
            for line in lines_list:
                line = line.replace(' ' ,'')
        
                if line != '':
                    line_list = line.split('->')
        
                    if line_list[0].isupper() and line_list[1] != '':
                        if '|' in line_list[1]:
                            prod_list = line_list[1].split('|')
                            for prod in prod_list:
                                self.grammar.append([line_list[0],prod])
                        else:
                            self.grammar.append(line_list)
                    else:
                        self.ui.textBrowser.clear()
                        self.ui.textBrowser.setText("Invalid grammar")
                        self.grammar = []
    
            if self.grammar != []:
                term_and_nonterm(self.grammar,self.term,self.non_term)
                calculate_first(self.grammar,self.first,self.term,self.non_term)
                get_augmented(self.grammar,self.augment_grammar)
                find_states(self.states,self.augment_grammar,self.first,self.term,self.non_term)
                combine_states(self.lalr_states, self.states)
                get_parse_table(self.parse_table,self.lalr_states,self.augment_grammar)
                self.changed = False

        except (KeyError, IndexError):
            self.ui.textBrowser.clear()
            self.ui.textBrowser.setText("Invalid grammar")
            self.init()
            


############################         DISPLAY          ################################

    def disp(self):
        self.ui.textBrowser.clear()
        if self.grammar == [] or self.changed:
            self.read_input()

        if self.grammar != []:
            for prod in self.grammar:
                s =  prod[0]+ ' -> ' + prod[1]+'\n'
                self.ui.textBrowser.append(s)
            self.ui.textBrowser.append("\nNon Terminals : "+' '.join(self.non_term)+"\nTerminals : "+' '.join(self.term))
        

    def disp_first(self):
        if self.first == {} or self.changed:
            self.read_input()
        if self.first != {}:
            self.ui.textBrowser.clear()
            for nonterm in self.non_term:
                self.ui.textBrowser.append('First('+nonterm+') : '+' '.join(self.first[nonterm])+'\n')


    def disp_lr1_states(self):
        if self.states == [] or self.changed:
            self.read_input()
        if self.states != []:
            self.ui.textBrowser.clear()
            self.ui.textBrowser.append("Number of LR(1) states : "+ str(self.states[len(self.states)-1].state_num + 1))
            for state in self.states:
                self.ui.textBrowser.append('----------------------------------------------------------------')
                if state.state_num == 0:
                    self.ui.textBrowser.append("\nI"+str(state.state_num)+' : '+'\n')
                else:
                    self.ui.textBrowser.append("\nI"+str(state.state_num)+' : '+' goto ( I'+str(state.parent[0])+" -> '"+ str(state.parent[1]) +"' )\n")
                for item in state.state:
                    self.ui.textBrowser.append(item[0]+ ' -> ' + item[1]+' ,  [ '+ ' '.join(item[2])+' ]')
                if state.actions != {}:
                    self.ui.textBrowser.append('\nActions : ')
                    for k,v in state.actions.items():
                        self.ui.textBrowser.insertPlainText(str(k)+' -> '+str(abs(v))+'\t')



    def disp_lalr_states(self):
        if self.lalr_states == [] or self.changed:
            self.read_input()
        if self.lalr_states != []:
            self.ui.textBrowser.clear()
            self.ui.textBrowser.append("Number of LALR states : " + str(lalrState.state_count))
            for state in self.lalr_states:
                self.ui.textBrowser.append('----------------------------------------------------------------')
                if state.state_num == 0:
                    self.ui.textBrowser.append("\nI"+str(state.state_num)+' : '+'\tGot by -> '+str(state.parent_list)+'\n')
                else:
                    self.ui.textBrowser.append("\nI"+str(state.state_num)+' : '+' goto ( I'+str(state.parent[0])+" -> '"+ str(state.parent[1]) +"' )"+'\tGot by -> '+str(state.parent_list)+'\n')
                for item in state.state:
                    self.ui.textBrowser.append(item[0]+ ' -> ' + item[1]+' ,   [ '+ ' '.join(item[2])+' ]')
                if state.actions != {}:
                    self.ui.textBrowser.append('\nActions : ')
                    for k,v in state.actions.items():
                        self.ui.textBrowser.insertPlainText(str(k)+' -> '+str(abs(v))+'\t')



    def disp_parse_table(self):
        if self.grammar == [] or self.changed:
            self.read_input()

        if self.grammar != []:
            self.ui.textBrowser.clear()
            all_symb = []
            all_symb.extend(self.term)
            all_symb.append('$')
            all_symb.extend(self.non_term)
            if 'e' in all_symb:
                all_symb.remove('e')

            head = '{0:12}'.format(' ')
            for X in all_symb:
                head = head + '{0:12}'.format(X)
            self.ui.textBrowser.setText(head+'\n')
            s = '------------'*len(all_symb)
            self.ui.textBrowser.append(s)

            for index, state in enumerate(self.parse_table):
                line = '{0:<12}'.format(index)
                for X in all_symb:
                    if X in state.keys():
                        if X in self.non_term:
                            action = state[X]
                        else:
                            if state[X] > 0:
                                action = 's' + str(state[X])
                            elif state[X] < 0:
                                action = 'r' + str(abs(state[X]))
                            elif state[X] == 0:
                                action = 'accept'
                        
                        line = line + '{0:<12}'.format(action)
                    else:
                        line = line + '{0:<12}'.format("")
    
                self.ui.textBrowser.append(line)
                self.ui.textBrowser.append(s)


    def disp_parsing(self):
        if self.grammar == [] or self.changed:
            self.read_input()
        if self.grammar != []:
            self.ui.textBrowser.clear()
            line_input = self.ui.lineEdit.text()
            self.parse(self.parse_table, self.augment_grammar, line_input)



    def parse(self,parse_table,augment_grammar,inpt):
        inpt = list(inpt+'$')
        stack = [0]
        a = inpt[0]
        try:
            head = '{0:40} {1:40} {2:40}'.format("Stack","Input", "Actions")
            self.ui.textBrowser.setText(head)
            while True:
                string = '\n{0:<40} {1:<40} '.format(stack, ''.join(inpt))
                s = stack[len(stack)-1]
                action = parse_table[s][a]
                if action > 0:
                    inpt.pop(0)
                    stack.append(action)
                    self.ui.textBrowser.append(string + 'Shift ' + a+ '\n')
                    a = inpt[0]
                elif action < 0:
                    prod = augment_grammar[-action]
                    if prod[1] != 'e':
                        for i in prod[1]:
                            stack.pop()
                    t = stack[len(stack)-1]
                    stack.append(parse_table[t][prod[0]])
                    self.ui.textBrowser.append(string + 'Reduce ' + prod[0] + ' -> '+ prod[1] + '\n')
                elif action == 0:
                    self.ui.textBrowser.append('ACCEPT\n')
                    break
        except KeyError:
            self.ui.textBrowser.append('\n\nERROR\n')


    def exit_app(self):
        QtGui.QApplication.quit()
        
    def disp_author(self):
        QtGui.QMessageBox.information(self, "About", "LALR PARSER\n\nAuthor:\n  Akshay Hebbar Y S\t", QtGui.QMessageBox.Ok)
예제 #25
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.lineEdit.setPlaceholderText("Search By Room Name, City or Country")
        scroll_area = self.ui.GridScrolarea
        scrollAreaWidgetContents = QtWidgets.QWidget()
        scroll_area.setWidgetResizable(True)
        self.grid = QtWidgets.QGridLayout(scrollAreaWidgetContents)
        scroll_area.setWidget(scrollAreaWidgetContents)
        self.ui.verticalLayout_2.addWidget(scroll_area)
        self.data = list()
        self.read_excel_file('input.xlsx')
        self.add_items(self.data)
        self.ui.pushButton.clicked.connect(self.search_click)
        self.ui.pushButton_2.clicked.connect(partial(self.add_items, self.data))
        self.ui.pushButton_3.clicked.connect(partial(self.run_combo_click))

    def run_combo_click(self):
        t = self.ui.comboBox.currentText()
        print(t)
        koi_b_phase2(t)

    def read_excel_file(self, file):
        wb = load_workbook(file)
        s = wb[wb.sheetnames[0]]
        max = s.max_row
        for row in range(2, max + 1):
            obj = ButtonData()
            obj.id = s['A' + str(row)].value
            obj.url = s['B' + str(row)].value
            obj.avg = s['C' + str(row)].value
            obj.room_name = s['D' + str(row)].value
            obj.city = s['E' + str(row)].value
            obj.country = s['F' + str(row)].value
            self.data.append(obj)
        wb.close()

    def clear_all(self):
        for i in range(self.grid.count()):
            self.grid.itemAt(i).widget().close()

    def add_items(self, data):
        self.clear_all()
        rows = int(len(data) / 5) + 1
        count = 0
        for i in range(rows):
            for j in range(5):
                if count == len(data):
                    break
                btn = QtWidgets.QPushButton(data[count].room_name)
                btn.setFixedHeight(30)
                btn.setFixedWidth(150)
                btn.clicked.connect(partial(self.button_clicked, data[count]))
                self.grid.addWidget(btn, i, j)
                count = count + 1

    def button_clicked(self, data):
        print(data.id)
        koi_b(data)

    def search_click(self):
        self.clear_all()
        key = str(self.ui.lineEdit.text()).lower().strip()
        subData = list()
        for d in self.data:
            if key in str(d.city).lower().strip() or key in str(d.room_name).lower().strip() or key in str(
                    d.country).lower().strip():
                subData.append(d)
        if len(subData) == 0:
            lbl = QtWidgets.QLabel("No Result Found")
            font = QtGui.QFont()
            font.setPointSize(20)
            lbl.setFont(font)
            self.grid.addWidget(lbl, 0, 0)
        else:
            self.add_items(subData)
예제 #26
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.LoginButton.clicked.connect(self.login)
        self.ui.imagedetectbtn.clicked.connect(self.DetectImage)
        self.ui.openFilebtn.clicked.connect(self.openFile)
        self.ui.setPathbtn.clicked.connect(self.outputFile)

        self.ui.detectimage.clicked.connect(self.switchImageWidget)
        self.ui.detectvideo.clicked.connect(self.switchVideoWidget)
        self.ui.webcamDetect.clicked.connect(self.switchWebcamWidget)
        self.ui.usernotifications.clicked.connect(
            self.switchNotificationsWidget)
        self.ui.userSettings.clicked.connect(self.switchSettingsWidget)
        self.ui.logout.clicked.connect(self.switchLoginWidget)
        self.ui.signbtn.clicked.connect(self.switchSignupWidget)
        self.ui.createAccountbtn.clicked.connect(self.signup)
        self.ui.changeUserInfobtn.clicked.connect(self.switchUserInfoWidget)
        self.ui.Changepasswordbtn.clicked.connect(self.switchPasswordWidget)
        self.ui.saveuserinfobtn.clicked.connect(self.saveUserInfo)
        self.ui.savenewpasswordbtn.clicked.connect(self.saveNewPassword)
        self.ui.detectCamera.clicked.connect(self.detectCameraIP)
        self.ui.backToNotification.clicked.connect(
            self.switchNotificationsWidget)
        self.ui.filterbtn.clicked.connect(self.filterValues)
        self.ui.detectCamera_2.clicked.connect(self.detectVideo)
        self.ui.openFilebtn_2.clicked.connect(self.openVideoFile)
        self.ui.homebutton.clicked.connect(self.switchHomeWidget)
        #Create event for notification so user can delete or save
        self.ui.listWidget_2.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.ui.listWidget_2.customContextMenuRequested.connect(
            self.rightClickFunction)
        self.customMenu = QtWidgets.QMenu('Menu', self.ui.listWidget_2)
        self.customMenu.addAction(QtGui.QIcon('images/resize.png'), "Enlarge",
                                  self.enlargeImage)
        self.customMenu.addAction(QtGui.QIcon('images/save.png'), "Save",
                                  self.saveFunction)
        self.customMenu.addAction(QtGui.QIcon('images/delete.png'), "Delete",
                                  self.deleteFunction)

        #Filter
    def filterValues(self):
        #Array containing checkbox values
        Detection_type = []
        if self.ui.checkBox.isChecked():
            Detection_type.append("image")
        if self.ui.checkBox_2.isChecked():
            Detection_type.append("video")
        if self.ui.checkBox_3.isChecked():
            Detection_type.append("webcam")

        #Get date from user input and rearrange format
        date1 = datetime.datetime.strptime(
            str(self.ui.dateEdit_2.date().toPyDate()),
            '%Y-%m-%d').strftime('%d-%m-%Y')
        date2 = datetime.datetime.strptime(
            str(self.ui.dateEdit_3.date().toPyDate()),
            '%Y-%m-%d').strftime('%d-%m-%Y')

        #Go through each widget and filter it depending on what the user has picked
        for row in range(self.ui.listWidget_2.count()):
            index = self.ui.listWidget_2.item(row)
            widget = self.ui.listWidget_2.itemWidget(index)
            if self.filter(Detection_type, date1, date2, 5, 5, widget):
                index.setHidden(False)
            else:
                index.setHidden(True)

    #Filter if statements checks certain conditiions
    def filter(self, detection_types, date1, date2, time1, time2, widget):
        date_check = widget.customWidgetDate.text().replace("Date: ", "")
        type_check = widget.customWidgetType.text().replace("Detection: ", "")

        myDate = datetime.datetime.strptime(date_check, '%d-%m-%Y')
        userDate1 = datetime.datetime.strptime(date1, '%d-%m-%Y')
        userDate2 = datetime.datetime.strptime(date2, '%d-%m-%Y')
        default_date = datetime.datetime.strptime("01-01-2000", '%d-%m-%Y')

        #Order date so it doesnt matter which way user enters date
        if userDate1 != default_date and userDate2 != default_date:
            if userDate1 > userDate2:
                temp = userDate1
                userDate1 = userDate2
                userDate2 = temp

        #Filter
        #
        #Simple filter with IF statements to check if widget has the thing we are looking for if so filter accordingly
        #
        if len(detection_types) == 0:
            if default_date == userDate1 and default_date != userDate2:
                if userDate2 == myDate:
                    return True
                else:
                    return False
            elif default_date != userDate1 and default_date == userDate2:
                if userDate1 == myDate:
                    return True
                else:
                    return False
            elif userDate1 != default_date and userDate2 != default_date:
                if userDate1 <= myDate and userDate2 >= myDate:
                    return True
                else:
                    return False
        else:
            if default_date == userDate1 and default_date != userDate2:
                if userDate2 == myDate and type_check in detection_types:
                    return True
                else:
                    return False
            elif default_date != userDate1 and default_date == userDate2:
                if userDate1 == myDate and type_check in detection_types:
                    return True
                else:
                    return False
            elif userDate1 != default_date and userDate2 != default_date:
                if userDate1 <= myDate and userDate2 >= myDate and type_check in detection_types:
                    return True
                else:
                    return False
            elif userDate1 == default_date and userDate2 == default_date:
                if type_check in detection_types:
                    return True
                else:
                    return False
        return True

    #Enlarges image for detection image in notification
    def enlargeImage(self):
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.largeImage)

        #Takes image and breaks the file name apart so it can be stored correctly
        widget = self.ui.listWidget_2.itemWidget(
            self.ui.listWidget_2.currentItem())
        date = widget.customWidgetDate.text().replace("Date: ", "")
        time = widget.customWidgetScore.text().replace("Time: ", "")
        time = time.replace(":", "-")
        type = widget.customWidgetType.text().replace("Detection: ", "")
        value = str(date + " " + time + " " + type + ".jpg")

        #Get the user images and downloads them and displays it to the notifications
        imageBlob = bucket.blob(current_user + "/" + value)
        with urllib.request.urlopen(imageBlob.public_url) as url:
            s = url.read()
            pixmap1 = QtGui.QPixmap()
            pixmap1.loadFromData(s)
            pixmap = QtGui.QPixmap(pixmap1)
            self.ui.enlargeImagelabel.setPixmap(QtGui.QPixmap(pixmap))
            self.ui.enlargeImagelabel.setScaledContents(True)
            self.ui.enlargeImagelabel.setSizePolicy(
                QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
            self.ui.label_6.setText(widget.customWidgetDate.text())
            self.ui.label_32.setText(widget.customWidgetScore.text())
            self.ui.label_33.setText(widget.customWidgetType.text())

    #Allows you to save the images in notifications
    def saveFunction(self):
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)
        file = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
        if file != "":
            widget = self.ui.listWidget_2.itemWidget(
                self.ui.listWidget_2.currentItem())
            date = widget.customWidgetDate.text().replace("Date: ", "")
            time = widget.customWidgetScore.text().replace("Time: ", "")
            time = time.replace(":", "-")
            type = widget.customWidgetType.text().replace("Detection: ", "")
            value = str(date + " " + time + " " + type + ".jpg")
            print(file + "/" + value)
            imageBlob = bucket.blob(
                current_user + "/" +
                value)  #Get the users folder from database, and their images
            urllib.request.urlretrieve(imageBlob.public_url,
                                       file + "/" + value)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    #Allows you to delete notifications from your database
    def deleteFunction(self):
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)
        global item
        global firebase
        widget = self.ui.listWidget_2.itemWidget(
            self.ui.listWidget_2.currentItem())
        date = widget.customWidgetDate.text().replace("Date: ", "")
        time = widget.customWidgetScore.text().replace("Time: ", "")
        time = time.replace(":", "-")
        type = widget.customWidgetType.text().replace("Detection: ", "")
        value = str(date + " " + time + " " + type + ".jpg")
        self.ui.listWidget_2.removeItemWidget(
            self.ui.listWidget_2.currentItem())
        self.ui.listWidget_2.takeItem(
            self.ui.listWidget_2.row(self.ui.listWidget_2.currentItem()))
        widget.deleteLater()
        key = None
        for k, v in answer["imagePaths"].items():
            if v == value:
                break
        firebase.delete("/users/" + userID + "/imagePaths/" + k, None)

        print("delete")

    #Creates right click options with enlarge, save, delete
    def rightClickFunction(self, event):
        global item
        index = self.ui.listWidget_2.indexAt(event)
        if not index.isValid():
            return
        item = self.ui.listWidget_2.indexAt(event)
        self.customMenu.popup(QtGui.QCursor.pos())

    #Saves new password
    def saveNewPassword(self):
        if self.ui.lineEdit_6.text() == answer["password"]:
            value = self.passwordValidation(self.ui.lineEdit_7.text())
            if "perfect" == value:
                if self.ui.lineEdit_7.text() == self.ui.lineEdit_8.text():
                    firebase.put('/users/' + userID, "password",
                                 self.ui.lineEdit_7.text())
                    self.ui.errorlabel.setText("Updated password")
                else:
                    self.ui.errorlabel.setText("Passwords not the same")
            else:
                self.ui.errorlabel.setText(value)
        else:
            self.ui.errorlabel.setText("Current password is incorrect")

    #Saves user info
    def saveUserInfo(self):
        firebase.put('/users/' + userID, "firstName",
                     self.ui.lineEdit_3.text())
        firebase.put('/users/' + userID, "lastName", self.ui.lineEdit_4.text())
        firebase.put('/users/' + userID, "email", self.ui.lineEdit_5.text())


#These set up the switches between the different pages for the application

    def switchUserInfoWidget(self):
        self.ui.stackedWidget_3.setCurrentWidget(self.ui.page)
        if answer is not None:
            self.ui.lineEdit_3.setText(answer["firstName"])
            self.ui.lineEdit_4.setText(answer["lastName"])
            self.ui.lineEdit_5.setText(answer["email"])

    def switchHomeWidget(self):
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.page_6)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    def switchPasswordWidget(self):
        self.ui.stackedWidget_3.setCurrentWidget(self.ui.page_2)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    def switchImageWidget(self):
        self.ui.label_21.setText("")
        self.ui.fileLabel.setText("Open file path")
        self.ui.pathLabel.setText("set file path")
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.detect_image_page)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    def switchWebcamWidget(self):
        self.ui.label_9.setText("")
        self.ui.cameraIP.setText("")
        self.ui.locationCamera.setText("")
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.detect_webcam_page)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    def switchVideoWidget(self):
        self.ui.errorvideo.setText("")
        self.ui.fileLabel_2.setText("Open file path")
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.detect_video_page)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    def switchSettingsWidget(self):
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.setting_page)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_4)

    def switchNotificationsWidget(self):
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.notification_page)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_5)

    def switchLoginWidget(self):
        self.ui.stackedWidget.setCurrentWidget(self.ui.login_page)
        self.ui.stackedWidget_2.setCurrentWidget(self.ui.page_6)
        self.ui.stackedWidget_4.setCurrentWidget(self.ui.page_5)
        self.ui.lineEdit_2.setText("")
        self.ui.listWidget_2.clear()
        self.ui.cameraIP.setText("")
        self.ui.label_17.setText("")
        self.ui.locationCamera.setText("")
        self.ui.fileLabel_2.setText("Open file path")
        self.ui.fileLabel.setText("Open file path")
        self.ui.pathLabel.setText("set file path")
        item = None
        userID = None
        current_user = None
        answer = None
        fname = None
        f1 = None
        flag = True
        fvideoname = None

    #creates a thread which is consistenly checking users input and seeing if they have entered everything correctly
    def newFunc(self):
        global flag
        global firebase
        result = firebase.get('/users', None)
        time.sleep(2)
        while flag:
            #Check username field
            answer = None
            if self.ui.usernamelabel.text():
                if len(self.ui.usernamelabel.text()) >= 4:
                    answer = next(
                        (item for item in result.values()
                         if item["username"] == self.ui.usernamelabel.text()),
                        None)
                    if answer is None:
                        self.ui.UsernameImg.setPixmap(
                            QtGui.QPixmap("./images/greentick.png"))
                        self.ui.usernameBtn.setText("Perfect!")
                    else:
                        self.badUsernameField()
                        self.ui.usernameBtn.setText("Username already exists")
                else:
                    self.badUsernameField()
                    self.ui.usernameBtn.setText(
                        "Username must be at least 4 characters")
            else:
                self.badUsernameField()
                self.ui.usernameBtn.setText("Username must be unique")

            #Check email fields
            if self.ui.emaillabel.text():
                if validate_email(self.ui.emaillabel.text()):
                    self.goodEmailField()
                    self.ui.emailBtn.setText("Perfect!")
                else:
                    self.badEmailField()
                    self.ui.emailBtn.setText("Email must be valid")
            else:
                self.badEmailField()
                self.ui.emailBtn.setText("Email must be valid")

            #Check password fields
            if self.ui.passwordlabel.text():
                vald1 = self.passwordLengthValidation(
                    self.ui.passwordlabel.text())
                vald3 = self.passwordNumberValidation(
                    self.ui.passwordlabel.text())
                vald2 = self.passwordCapitalValidation(
                    self.ui.passwordlabel.text())

                if vald1 == "perfect":
                    self.goodPasswordLengthField()
                    self.ui.passwordBtn.setText("Perfect!")
                else:
                    self.badPasswordLengthField()
                    self.ui.passwordBtn.setText(
                        "Password must be longer than 4 characters")

                if vald2 == "perfect":
                    self.goodPasswordCapitalField()
                    self.ui.passwordBtn_2.setText("Perfect!")
                else:
                    self.badPasswordCapitalField()
                    self.ui.passwordBtn_2.setText(
                        "Password must have a capital letter")

                if vald3 == "perfect":
                    self.goodPasswordNumberField()
                    self.ui.passwordBtn_3.setText("Perfect!")
                else:
                    self.badPasswordNumberField()
                    self.ui.passwordBtn_3.setText(
                        "Password must have a number")

                if self.ui.passwordlabel.text() == self.ui.passwordlabel2.text(
                ):
                    self.goodPasswordSameField()
                    self.ui.passwordBtn_4.setText("Perfect!")
                else:
                    self.badPasswordSameField()
                    self.ui.passwordBtn_4.setText("Passwords must be the same")
            else:
                self.badPasswordNumberField()
                self.badPasswordCapitalField()
                self.badPasswordLengthField()
                self.badPasswordSameField()
                self.ui.passwordBtn_3.setText("Password must have a number")
                self.ui.passwordBtn_2.setText(
                    "Password must have a capital letter")
                self.ui.passwordBtn.setText(
                    "Password must be longer than 4 characters")
                self.ui.passwordBtn_4.setText("Passwords must be the same")

            #     value = self.passwordValidation(self.ui.passwordlabel.text())
            #     if value == "perfect":
            #         if self.ui.passwordlabel2.text():
            #             if self.ui.passwordlabel.text() == self.ui.passwordlabel2.text():
            #                 self.goodPasswordField()
            #                 self.ui.passwordBtn.setText("Password is perfect!")
            #             else:
            #                 self.badPasswordField()
            #                 self.ui.passwordBtn.setText("Passwords must be the same")
            #         else:
            #             self.badPasswordField()
            #             self.ui.passwordBtn.setText("re-password field is empty!")
            #     else:
            #         self.badPasswordField()
            #         self.ui.passwordBtn.setText(value)
            # else:
            #     self.badPasswordField()
            #     self.ui.passwordBtn.setText("password field is empty!")

    def switchSignupWidget(self):
        self.ui.stackedWidget.setCurrentWidget(self.ui.page_3)
        self.ui.label_17.setText("")
        threading.Thread(target=self.newFunc, daemon=True).start()

    def passwordLengthValidation(self, password):
        if len(password) <= 4:
            return "Make sure your password is at least 5 letters"
        else:
            return "perfect"

    def passwordNumberValidation(self, password):
        if re.search('[0-9]', password) is None:
            return "Make sure your password has a number in it"
        else:
            return "perfect"

    def passwordCapitalValidation(self, password):
        if re.search('[A-Z]', password) is None:
            return "Make sure your password has a capital letter in it"
        else:
            return "perfect"

    def goodUsernameField(self):
        self.ui.UsernameImg.setPixmap(QtGui.QPixmap("./images/greentick.png"))

    def badUsernameField(self):
        self.ui.UsernameImg.setPixmap(QtGui.QPixmap("./images/wrongcross.png"))

    def goodEmailField(self):
        self.ui.emailImg.setPixmap(QtGui.QPixmap("./images/greentick.png"))

    def badEmailField(self):
        self.ui.emailImg.setPixmap(QtGui.QPixmap("./images/wrongcross.png"))

    def goodPasswordLengthField(self):
        self.ui.passwordImg.setPixmap(QtGui.QPixmap("./images/greentick.png"))

    def badPasswordLengthField(self):
        self.ui.passwordImg.setPixmap(QtGui.QPixmap("./images/wrongcross.png"))

    def goodPasswordCapitalField(self):
        self.ui.passwordImg_2.setPixmap(
            QtGui.QPixmap("./images/greentick.png"))

    def badPasswordCapitalField(self):
        self.ui.passwordImg_2.setPixmap(
            QtGui.QPixmap("./images/wrongcross.png"))

    def goodPasswordNumberField(self):
        self.ui.passwordImg_3.setPixmap(
            QtGui.QPixmap("./images/greentick.png"))

    def badPasswordNumberField(self):
        self.ui.passwordImg_3.setPixmap(
            QtGui.QPixmap("./images/wrongcross.png"))

    def goodPasswordSameField(self):
        self.ui.passwordImg_4.setPixmap(
            QtGui.QPixmap("./images/greentick.png"))

    def badPasswordSameField(self):
        self.ui.passwordImg_4.setPixmap(
            QtGui.QPixmap("./images/wrongcross.png"))

    def signup(self):
        global firebase
        global flag
        result = firebase.get('/users', None)
        firstname = self.ui.firstnamelabel.text()
        surname = self.ui.surnamelabel.text()
        email = self.ui.emaillabel.text()
        username = self.ui.usernamelabel.text()
        password = self.ui.passwordlabel.text()
        repassword = self.ui.passwordlabel2.text()

        #Quickly check which button is checked

        if "Perfect" in self.ui.emailBtn.text(
        ) and "Perfect" in self.ui.passwordBtn.text(
        ) and "Perfect" in self.ui.usernameBtn.text(
        ) and "Perfect" in self.ui.passwordBtn_2.text(
        ) and "Perfect" in self.ui.passwordBtn_3.text(
        ) and "Perfect" in self.ui.passwordBtn_4.text():
            flag = False

            user = User(firstname, surname, email, username, "Not specified",
                        5, password, [])
            result = firebase.post('/users', user.__dict__)

            self.ui.stackedWidget.setCurrentWidget(self.ui.login_page)

        else:
            print("fix errors")

    #LETS THE USER Login
    def login(self):
        global answer
        global firebase
        global current_user
        global userID
        result = firebase.get('/users', None)
        username = self.ui.lineEdit.text()
        password = self.ui.lineEdit_2.text()

        userID = next(
            (item for item in result if result[item]["username"] == username),
            None)  #Get user ID
        answer = next(
            (item for item in result.values() if item["username"] == username),
            None)  #Get user DATA

        if answer is None:
            self.ui.label_17.setText("User doesn't exist")
        else:
            if answer["password"] == password:
                current_user = answer["username"]
                #firebase.post('/users/'+ userID + '/imagePaths','C:/Users/abdsaam/Desktop/pythonapp/designs/images/greentick.png')
                self.ui.stackedWidget.setCurrentIndex(0)

                qApp.processEvents()
                if "imagePaths" in answer:
                    for x in answer["imagePaths"].values():
                        print(x)
                        imageBlob = bucket.blob(
                            current_user + "/" + x
                        )  #Get the users folder from database, and their images
                        print(imageBlob.public_url)
                        with urllib.request.urlopen(
                                imageBlob.public_url) as url:
                            s = url.read()
                            wid = test_widget()
                            wid.setImage(s)
                            values = x.split()

                            wid.setLabelDate(str("Date: " + values[0]))
                            wid.setLabelTime(
                                str("Time: " + values[1].replace("-", ":")))
                            wid.setLabelType(
                                str("Detection: " +
                                    values[2].replace(".jpg", "")))
                            widgetItem = QtWidgets.QListWidgetItem(
                                self.ui.listWidget_2)
                            widgetItem.setSizeHint(wid.sizeHint())
                            self.ui.listWidget_2.addItem(widgetItem)
                            self.ui.listWidget_2.setItemWidget(widgetItem, wid)

                #imageBlob.upload_from_filename('C:/Users/abdsaam/Desktop/pythonapp/designs/images/greentick.png')

                # imageBlob = bucket.blob(self.ui.lineEdit.text()+"/")
                #print(imageBlob)
            else:
                self.ui.label_17.setText("Incorrect password")

    def DetectImage(self):
        self.ui.label_21.setText("Loading.... Application might freeze....")
        qApp.processEvents()
        global f1, fname

        image = cv2.imread(fname[0])  #get filename
        image_expanded = np.expand_dims(image, axis=0)  #convert to numpy array

        #Saves model output into 4 values
        (boxes, scores, classes, num) = sess.run(
            [
                detection_boxes, detection_scores, detection_classes,
                num_detections
            ],
            feed_dict={image_tensor: image_expanded}
        )  #uses model that was loaded in and feeds it a np array of the image we wish to have detected

        #Detect image
        vis_util.visualize_boxes_and_labels_on_image_array(
            image,
            np.squeeze(boxes),
            np.squeeze(classes).astype(np.int32),
            np.squeeze(scores), {1: {
                'name': 'smoker',
                'id': 1
            }},
            use_normalized_coordinates=True,
            line_thickness=8,
            min_score_thresh=0.90)

        # selected_indices = tf.image.non_max_suppression(boxes[0], scores[0], 5, 0.5)
        # print(scores[0])
        # print(selected_indices)
        # print(selected_indices.get_shape().as_list())
        # selected_boxes = tf.gather(boxes, selected_indices)
        # print(selected_boxes)
        # print(selected_boxes.get_shape().as_list())
        # threshold = 0.5
        # height, width = image.shape[:2] #gets height and width of image
        # for x in selected_indices.get_shape().as_list():
        #     if x is None:
        #         ymin = boxes[0][0][0]*height
        #         xmin = boxes[0][0][1]*width
        #         ymax = boxes[0][0][2]*height
        #         xmax = boxes[0][0][3]*width
        #     else:
        #         ymin = boxes[0][x][0]*height
        #         xmin = boxes[0][x][1]*width
        #         ymax = boxes[0][x][2]*height
        #         xmax = boxes[0][x][3]*width
        #     cv2.rectangle(image, (int(xmin),int(ymin)), (int(xmax),int(ymax)),(0,255,0),5)

        #Get the date time and save it
        datetimevalue = strftime("%d-%m-%Y %H-%M-%S", gmtime())
        cv2.imwrite(f1 + "/" + datetimevalue + " " + "image" + ".jpg", image)
        pixmap = QtGui.QPixmap(f1 + "/" + datetimevalue + " " + "image" +
                               ".jpg")
        scaled_pixmap = pixmap.scaled(500, 500, QtCore.Qt.KeepAspectRatio)

        #Post the image to the database with the date and time
        self.ui.label_11.setPixmap(QtGui.QPixmap(scaled_pixmap))
        if self.ui.saveNotificationsImage.isChecked():
            value = datetimevalue + " " + "image" + ".jpg"
            firebase.post('/users/' + userID + '/imagePaths', value)
            imageBlob = bucket.blob(current_user + "/" + value)
            path = f1 + "/" + datetimevalue + " " + "image" + ".jpg"
            imageBlob.upload_from_filename(path)
            self.newNotification(f1 + "/" + value, value)

        self.ui.label_21.setText("Done!")

    def newNotification(self, path, s):
        wid = test_widget()
        wid.setImage1(path)
        values = s.split()
        wid.setLabelDate(str("Date: " + values[0]))
        wid.setLabelTime(str("Time: " + values[1].replace("-", ":")))
        wid.setLabelType(str("Detection: " + values[2].replace(".jpg", "")))
        widgetItem = QtWidgets.QListWidgetItem(self.ui.listWidget_2)
        widgetItem.setSizeHint(wid.sizeHint())
        self.ui.listWidget_2.insertItem(0, widgetItem)
        self.ui.listWidget_2.setItemWidget(widgetItem, wid)

    def outputFile(self):
        global f1
        f1 = QFileDialog.getExistingDirectory(None, "Select Output Folder")
        self.ui.pathLabel.setText(f1)

    def openFile(self):
        global fname
        fname = QFileDialog.getOpenFileName(None, 'Open file', 'c:\\',
                                            'Image files (*.jpg *.png)')
        pixmap = QtGui.QPixmap(fname[0])
        scaled_pixmap = pixmap.scaled(500, 500, QtCore.Qt.KeepAspectRatio)
        self.ui.label_11.setPixmap(QtGui.QPixmap(scaled_pixmap))
        self.ui.fileLabel.setText(fname[0])

    def openVideoFile(self):
        global fvideoname
        fvideoname = QFileDialog.getOpenFileName(None, 'Open file', 'c:\\',
                                                 'Video files (*.mp4 *.mov)')
        self.ui.fileLabel_2.setText(fvideoname[0])

    def detectVideo(self):
        global fvideoname
        self.ui.errorvideo.setText("Loading.... Application might freeze....")
        qApp.processEvents()
        video = cv2.VideoCapture(fvideoname[0])
        if video.isOpened():
            self.ui.errorvideo.setText("Done!")
            current_time = time.time()
            while (video.isOpened()):
                #Get frame and expand it so it can fed to tensorflow
                ret, frame = video.read()

                frame_expanded = np.expand_dims(frame, axis=0)
                # Perform the actual detection by running the model with the image as input
                (boxes, scores, classes,
                 num) = sess.run([
                     detection_boxes, detection_scores, detection_classes,
                     num_detections
                 ],
                                 feed_dict={image_tensor: frame_expanded})

                #Draws bounding box around the detected part of the image #Helper code
                vis_util.visualize_boxes_and_labels_on_image_array(
                    frame,
                    np.squeeze(boxes),
                    np.squeeze(classes).astype(np.int32),
                    np.squeeze(scores), {1: {
                        'name': 'smoker',
                        'id': 1
                    }},
                    use_normalized_coordinates=True,
                    line_thickness=8,
                    min_score_thresh=0.90)

                #Show the detected image on the window
                cv2.imshow("video", frame)

                if scores[0][0] * 100 > 90:
                    if self.thirty_timer(current_time):
                        current_time = time.time()
                        datetimevalue = strftime("%d-%m-%Y %H-%M-%S", gmtime())
                        cv2.imwrite(
                            "./videoimages" + "/" + datetimevalue + " " +
                            "video" + ".jpg", frame)
                        if self.ui.saveNotificationsImage_3.isChecked():
                            value = datetimevalue + " " + "video" + ".jpg"
                            firebase.post('/users/' + userID + '/imagePaths',
                                          value)
                            imageBlob = bucket.blob(current_user + "/" + value)
                            path = "./videoimages" + "/" + datetimevalue + " " + "video" + ".jpg"
                            imageBlob.upload_from_filename(path)
                            self.newNotification("./videoimages" + "/" + value,
                                                 value)

                #Q or Esc to quit detecting webcam
                k = cv2.waitKey(1)
                if k == ord('q') or k == 27:
                    break
                if cv2.getWindowProperty("video", 1) == -1:
                    break

            # Clean up
            video.release()
            cv2.destroyAllWindows()
        else:
            self.ui.errorvideo.setText("Error with video file")

    def thirty_timer(self, oldtime):
        return time.time() - oldtime >= 30

    def detectCameraIP(self):

        self.ui.label_9.setText("Loading.... Application might freeze....")
        qApp.processEvents()
        #Check if user is connecting to USB webcam or trying to connect to cameraIP address
        if self.ui.cameraIP.text().isdigit():
            cameraIPvalue = int(self.ui.cameraIP.text())
        else:
            cameraIPvalue = self.ui.cameraIP.text()

        video = cv2.VideoCapture(cameraIPvalue)
        video.set(3, 1024)
        video.set(4, 768)

        if video.isOpened():
            self.ui.label_9.setText("Done!")
            current_time = time.time()
            while (True):
                #Get frame and expand it so it can fed to tensorflow
                ret, frame = video.read()

                frame_expanded = np.expand_dims(frame, axis=0)
                # Perform the actual detection by running the model with the image as input
                (boxes, scores, classes,
                 num) = sess.run([
                     detection_boxes, detection_scores, detection_classes,
                     num_detections
                 ],
                                 feed_dict={image_tensor: frame_expanded})

                #Draws bounding box around the detected part of the image #Helper code
                vis_util.visualize_boxes_and_labels_on_image_array(
                    frame,
                    np.squeeze(boxes),
                    np.squeeze(classes).astype(np.int32),
                    np.squeeze(scores), {1: {
                        'name': 'smoker',
                        'id': 1
                    }},
                    use_normalized_coordinates=True,
                    line_thickness=8,
                    min_score_thresh=0.90)

                #Show the detected image on the window
                cv2.imshow(self.ui.locationCamera.text(), frame)

                if scores[0][0] * 100 > 90:
                    if self.thirty_timer(current_time):
                        current_time = time.time()
                        datetimevalue = strftime("%d-%m-%Y %H-%M-%S", gmtime())
                        cv2.imwrite(
                            "./webcamimages" + "/" + datetimevalue + " " +
                            "webcam" + ".jpg", frame)
                        if self.ui.saveNotificationsImage_2.isChecked():
                            value = datetimevalue + " " + "webcam" + ".jpg"
                            firebase.post('/users/' + userID + '/imagePaths',
                                          value)
                            imageBlob = bucket.blob(current_user + "/" + value)
                            path = "./webcamimages" + "/" + datetimevalue + " " + "webcam" + ".jpg"
                            imageBlob.upload_from_filename(path)
                            self.newNotification(
                                "./webcamimages" + "/" + value, value)

                #Q or Esc to quit detecting webcam
                k = cv2.waitKey(1)
                if k == ord('q') or k == 27:
                    break
                if cv2.getWindowProperty(self.ui.locationCamera.text(),
                                         1) == -1:
                    break

            # Clean up
            video.release()
            cv2.destroyAllWindows()
        else:
            self.ui.label_9.setText("Cannot find camera")
예제 #27
0
class MainView(QMainWindow):
    def __init__(self, model: MainModel, controller: MainController):
        super().__init__()
        self.controller = controller
        self.model = model
        self.currentBlock = ""

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.saveControls()
        self.setupButtons()
        self.model.subscribe_update_function(self.updateFilenames)

    def saveControls(self):
        self.controls = {
            "radioButtons": self.ui.centralwidget.findChildren(QRadioButton),
            "dateEdits": self.ui.centralwidget.findChildren(QDateTimeEdit),
            "selects": self.ui.centralwidget.findChildren(QComboBox),
            "textEdits": self.ui.centralwidget.findChildren(QLineEdit),
            "checkboxes": self.ui.centralwidget.findChildren(QCheckBox),
            "counters": self.ui.centralwidget.findChildren(QSpinBox)
        }

    def setupButtons(self):
        self.ui.Btn_Delete.clicked.connect(self.deleteFiles)
        self.ui.Btn_Confirm.clicked.connect(self.runRename)
        self.ui.Btn_AddBlock.clicked.connect(self.addBlockToBlocksArea)

        self.ui.Table_FilesList.filesdropped.connect(self.addFile)
        self.ui.listW_New_Pattern.newdrop.connect(self.updatePattern)
        self.ui.listW_New_Pattern.model().rowsRemoved.connect(
            self.updatePattern)

        # Connect controls to onChange function
        self.ui.Toolbox_BlockSettings.currentChanged.connect(self.onChange)

        for rb in self.controls["radioButtons"]:
            rb.clicked.connect(self.onChange)

        for de in self.controls["dateEdits"]:
            de.setDateTime(QDateTime.currentDateTime())
            de.editingFinished.connect(self.onChange)

        for sel in self.controls["selects"]:
            sel.currentIndexChanged.connect(self.onChange)

        for ed in self.controls["textEdits"]:
            ed.textChanged.connect(self.onChange)

        for cb in self.controls["checkboxes"]:
            cb.stateChanged.connect(self.onChange)

        for c in self.controls["counters"]:
            c.valueChanged.connect(self.onChange)

    def resetButtons(self):
        for de in self.controls["dateEdits"]:
            de.setDateTime(QDateTime.currentDateTime())

        for sel in self.controls["selects"]:
            sel.currentIndex = 0

        for ed in self.controls["textEdits"]:
            ed.clear()

        for c in self.controls["counters"]:
            c.blockSignals(True)
            c.setValue(c.minimum())
            c.blockSignals(False)

        for cb in self.controls["checkboxes"] + self.controls["radioButtons"]:
            cb.blockSignals(True)
            if cb.autoExclusive():
                cb.setAutoExclusive(False)
                cb.setChecked(False)
                cb.setAutoExclusive(True)
            else:
                cb.setChecked(False)
            cb.blockSignals(False)

        self.currentBlock = None
        self.ui.Btn_AddBlock.setEnabled(False)

    @pyqtSlot()
    def onChange(self):
        # Toggle active/inactive  fields according radiobuttons/checkboxes
        if type(self.sender()) == QCheckBox or type(
                self.sender()) == QRadioButton:
            parentLayout = self.sender().parentWidget().findChildren(
                QGridLayout)[0]
            for row in range(parentLayout.rowCount()):
                item = parentLayout.itemAtPosition(row, 0)
                dependentsInRow = findItemsInLayout(parentLayout, row, row + 1,
                                                    1,
                                                    parentLayout.columnCount())
                if item and item.widget() and item.widget().isChecked():
                    [w.setEnabled(True) for w in dependentsInRow]
                else:
                    [w.setEnabled(False) for w in dependentsInRow]
        # Create new block value
        block = self.createBlock()
        self.currentBlock = block
        if self.currentBlock and len(self.currentBlock) > 0:
            self.ui.Btn_AddBlock.setEnabled(True)
            self.currentBlock = block
            self.displayPreview()
        else:
            self.ui.Btn_AddBlock.setEnabled(False)

    @pyqtSlot()
    def updatePattern(self):
        pattern = self.ui.listW_New_Pattern
        modelP = pattern.model()
        modelP.rowCount()
        patternList = []
        for i in range(pattern.count()):
            patternList.append(pattern.item(i).data(Qt.UserRole))
        self.controller.updatePattern(patternList)

    def displayPreview(self):
        block = self.currentBlock
        previewArea = self.ui.Lbl_PreviewBlock
        if block:
            previewArea.setText(block["prettyValue"])
        else:
            previewArea.setText("")

    def addBlockToBlocksArea(self):
        if self.currentBlock:
            self.ui.listW_BlocksArea.addBlock(self.currentBlock)
        self.resetButtons()

    def createBlock(self):
        if self.ui.Toolbox_BlockSettings.currentIndex() == 0:
            return self.createTextBlock()
        elif self.ui.Toolbox_BlockSettings.currentIndex() == 1:
            return self.createNumberBlock()
        else:
            pass

    def createTextBlock(self):
        if self.ui.RB_Text_exactText.isChecked():
            data = self.ui.Inp_Text_exactText.text()
            if len(data) > 0:
                block = {
                    "value": data,
                    "case": self.resolveCase(),
                    "separator": self.resolveSeparator()
                }
                block["prettyValue"] = self.createPrettyValue(block)
                return block
        elif self.ui.RB_Text_Date.isChecked():
            data = self.ui.Inp_Text_Date.date()
            dateformat = self.ui.Sel_Text_DateFormat.currentText()
            block = {
                "value": data.toString(dateformat),
                "case": self.resolveCase(),
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block
        elif self.ui.RB_Text_ParentFolder.isChecked():
            block = {
                "value": "ParentDir",
                "case": self.resolveCase(),
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block

        elif self.ui.RB_Text_OriginalName.isChecked():
            block = {
                "value": "OriginalName",
                "case": self.resolveCase(),
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block

        elif self.ui.RB_Text_Word.isChecked():
            wordIndex = self.ui.Inp_Word_index.value()
            separators = (self.ui.Inp_Word_Separators.text()
                          ) if self.ui.Inp_Word_Separators.text() else ""
            block = {
                "value": "Word:" + str(wordIndex) + ":" + separators,
                "case": self.resolveCase(),
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block
        else:
            pass

    def createNumberBlock(self):
        if self.ui.RB_Number_Counter.isChecked():
            count = self.ui.Inp_Numbering_StartFrom.value()
            zeroes = self.ui.Inp_Numbering_LeadingZeroes.value() + len(
                str(count))
            block = {
                "value": "Nr:" + str(count).zfill(zeroes),
                "case": None,
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block

        elif self.ui.RB_Number_Folder.isChecked():
            block = {
                "value": "Nr:Folder",
                "case": None,
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block

        elif self.ui.RB_Number_Items.isChecked():
            block = {
                "value": "Nr:All",
                "case": None,
                "separator": self.resolveSeparator()
            }
            block["prettyValue"] = self.createPrettyValue(block)
            return block
        else:
            pass

    def resolveCase(self):
        if self.ui.CB_Case_change.isChecked():
            sel = self.ui.Sel_Case
            if sel.currentText() == "lowercase":
                return "L"
            elif sel.currentText() == "UPPERCASE":
                return "U"
            elif sel.currentText() == "rEVERSE":
                return "R"
            else:
                return None
        else:
            return None

    def resolveSeparator(self):
        if self.ui.CB_Separators_include.isChecked():
            return self.ui.Inp_Separator.text()
        else:
            return None

    def createPrettyValue(self, block):
        previewString = block["value"]
        if block["separator"]:
            previewString += block["separator"]
        if block["case"]:
            if block["case"] == "L":
                previewString += u"\u2193"
            elif block["case"] == "U":
                previewString += u"\u2191"
            elif block["case"] == "R":
                previewString += u"\u2191\u2193"
            else:
                pass
        return previewString

    def updateFilenames(self):
        self.controller.updateFilenames()
        self.ui.Table_FilesList.updateFilenames(self.model.files)

    @pyqtSlot(str)
    def addFile(self, filepath):
        if os.path.isfile(filepath):
            if filepath not in self.model.files:
                file = createFileData(filepath)
                self.controller.addFile({filepath: file})
                self.ui.Table_FilesList.addFile(file)

    def deleteFiles(self):
        files = self.ui.Table_FilesList.checked.copy()
        for file in files:
            self.deleteFile(file)

    def deleteFile(self, filepath):
        if filepath in self.model.files:
            self.controller.deleteFile(filepath)
            self.ui.Table_FilesList.deleteFile(filepath)
            self.ui.Table_FilesList.checked.discard(filepath)

    def runRename(self):
        files = self.ui.Table_FilesList.checked.copy()
        if not files:
            self.ui.Lbl_Status.setText("No files selected")
            self.ui.Lbl_Status.setStyleSheet("color:red;")
        else:
            filesNameExists = 0
            filesNameNotDefined = 0
            for file in files:
                if self.model.files[file]["out"] and len(
                        self.model.files[file]["out"]) > 0:
                    try:
                        newPath = os.path.join(
                            os.path.dirname(file),
                            self.model.files[file]["out"] +
                            self.model.files[file]["ext"])
                        os.rename(file, newPath)
                        self.deleteFile(file)
                    except FileExistsError:
                        filesNameExists += 1
                else:
                    filesNameNotDefined += 1
            if filesNameExists:
                self.ui.Lbl_Status.setText(
                    "%d files were not renamed, because another file with same name exists"
                    % (filesNameExists))
                self.ui.Lbl_Status.setStyleSheet("color:red;")
            elif filesNameNotDefined:
                self.ui.Lbl_Status.setText(
                    "%d files were not renamed, because new name not defined" %
                    (filesNameNotDefined))
                self.ui.Lbl_Status.setStyleSheet("color:red;")
            else:
                self.ui.Lbl_Status.setText("All files renamed successfully!")
                self.ui.Lbl_Status.setStyleSheet("color:green;")
                self.ui.listW_New_Pattern.removeAllBlocks()
                self.controller.resetPattern()
예제 #28
0
class MainFrame(QtGui.QMainWindow, Ui_MainWindow):

    def __init__(self, loop, config):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.config = config
        self.ui.txt_log.insertPlainText('Файл настроек загружен.')

        self.prefs_window = None

        self.ui.menu_exit.triggered.connect(self._exit)
        self.ui.menu_preferences.triggered.connect(self.prefs_open)
        self.ui.menu_open.triggered.connect(self.open_dialog)
        self.ui.menu_save.triggered.connect(self.save)
        self.ui.menu_save_as.triggered.connect(self.save_as)
        self.ui.menu_create.triggered.connect(self.clear_numbers)

        self.ui.btn_exit.clicked.connect(self._exit)
        self.ui.btn_send.clicked.connect(self.send)

        self.loop = loop

    def _exit(self):
        sys.exit()

    def open_dialog(self):
        file_name = QtGui.QFileDialog.getOpenFileName(self, "Открыть файл списка номеров", "", "text file (*.txt)")
        if os.path.exists(file_name):
            self.ui.txt_sms_num.clear()
            with open(file_name, 'r') as f:
                self.ui.txt_sms_num.insertPlainText(f.read())
            self.response_decode((5, file_name))

    def save(self):
        file_name = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + '.txt'
        cat = os.path.split(os.path.abspath(__file__))[0]
        full_path = os.path.join(cat, file_name)
        with open(full_path, 'w') as f:
            f.write(self.ui.txt_sms_num.toPlainText())
        self.response_decode((6, file_name))

    def save_as(self):
        file_name = QtGui.QFileDialog.getSaveFileName(self, "Сохранить файл с номерами как", "", "text file (*.txt)")
        cat = os.path.split(os.path.abspath(__file__))[0]
        full_path = os.path.join(cat, file_name)
        with open(full_path, 'w') as f:
            f.write(self.ui.txt_sms_num.toPlainText())
        self.response_decode((6, file_name))

    def clear_numbers(self):
        self.ui.txt_sms_num.clear()


    def prefs_open(self):
        if self.prefs_window is None:
            self.prefs = Preferences(self.config)
            self.connect(self.prefs, QtCore.SIGNAL('config(PyQt_PyObject)'), self.reload_config)
            self.connect(self.prefs, QtCore.SIGNAL("response(PyQt_PyObject)"), self.response_decode)
            self.prefs.show()

    def reload_config(self, config):
        self.config = config

    def sanitarize_numbers(self):
        pattern = re.compile(r'\d+', flags=re.IGNORECASE)

        numbers = list(self.ui.txt_sms_num.toPlainText().split('\n'))

        phone_numbers = []
        for number in numbers:
            digits = re.findall(pattern, number)
            fixed_number = ''
            if len(digits) > 1:
                for digit in digits:
                    fixed_number += digit
                phone_numbers.append(fixed_number)
            elif len(digits) == 1:
                phone_numbers.append(digits[0])
        return phone_numbers

    def sanitarize_text(self):
        text = self.ui.txt_sms_text.toPlainText()
        pattern = re.compile(r'([\"\'])', flags=re.IGNORECASE)
        r_pattern = re.compile(r'[\"\']', flags=re.IGNORECASE)
        index = re.findall(pattern, text)

        if len(index) != 0:
            for i in range(1, len(index)+1):
                print(i%2)
                if i % 2 == 1:
                    text = re.sub(r_pattern, "<<", text, 1)
                elif i % 2 == 0:
                    text = re.sub(r_pattern, ">>", text, 1)
        return text

    def send(self):
        # Следующие аргументы должны быть загружены из файла в момент инициализации!!!
        numbers = list(self.ui.txt_sms_num.toPlainText().split('\n'))
        sms_text = self.ui.txt_sms_text.toPlainText()


        if self.config['sanitarize'] == 'true':
            numbers = self.sanitarize_numbers()
            sms_text = self.sanitarize_text()
        if numbers[0] == '':
            self.ui.txt_log.insertPlainText('Не указано ни одного номера телефона для отправки!\n')
        else:
            print(sms_text)
            self.GSM = GSMGateway(self.loop,(self.config['username'], self.config['password']),
                                  self.config['gateway'], SIMSlot=self.config['simslot'],
                                  numbers_list=numbers, text=sms_text)
            self.connect(self.GSM, QtCore.SIGNAL("response(PyQt_PyObject)"), self.response_decode)
            self.GSM.start()

    def response_decode(self, response):
        stage, data = response
        if stage == 0:
            if data == 'Connection established':
                self.ui.txt_log.insertPlainText('\nСоединение с шлюзом установлено успешно.')
            else:
                self.ui.txt_log.insertPlainText('\nНевозможно установить соединение со шлюзом.')
        elif stage == 1:
            if 'Success' in data:
                self.ui.txt_log.insertPlainText('\nДанные авторизации приняты')
            else:
                self.ui.txt_log.insertPlainText('\nШлюз отверг запрос авторизации')
        elif stage == 2:
            pattern = re.compile(r"\w+:\s?(\d+)", flags=re.IGNORECASE)
            if 'failed' in data:
                number = re.findall(pattern, data)[0]
                self.ui.txt_log.insertPlainText('\nОшибка отправки СМС на номер: %s' % number)
            elif 'Response: Follows' in data:
                number = re.findall(pattern, data)[0]
                self.ui.txt_log.insertPlainText('\nСМС отправлена на номер: %s' % number)
        #-------------------------------------------------------------------------------------
        elif stage == 5:
            self.ui.txt_log.insertPlainText('\nЗагружен файл списка номеров: %s' % data)
        elif stage == 6:
            self.ui.txt_log.insertPlainText('\nСохранен файл списка номеров: %s' % data)
        elif stage == 7:
            self.ui.txt_log.insertPlainText('\nФайл настроек изменен: %s' % data)
예제 #29
0
class MainFrame(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, loop, config):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.config = config
        self.ui.txt_log.insertPlainText('Файл настроек загружен.')

        self.prefs_window = None

        self.ui.menu_exit.triggered.connect(self._exit)
        self.ui.menu_preferences.triggered.connect(self.prefs_open)
        self.ui.menu_open.triggered.connect(self.open_dialog)
        self.ui.menu_save.triggered.connect(self.save)
        self.ui.menu_save_as.triggered.connect(self.save_as)
        self.ui.menu_create.triggered.connect(self.clear_numbers)

        self.ui.btn_exit.clicked.connect(self._exit)
        self.ui.btn_send.clicked.connect(self.send)

        self.loop = loop

    def _exit(self):
        sys.exit()

    def open_dialog(self):
        file_name = QtGui.QFileDialog.getOpenFileName(
            self, "Открыть файл списка номеров", "", "text file (*.txt)")
        if os.path.exists(file_name):
            self.ui.txt_sms_num.clear()
            with open(file_name, 'r') as f:
                self.ui.txt_sms_num.insertPlainText(f.read())
            self.response_decode((5, file_name))

    def save(self):
        file_name = datetime.datetime.now().strftime(
            "%Y-%m-%d_%H-%M-%S") + '.txt'
        cat = os.path.split(os.path.abspath(__file__))[0]
        full_path = os.path.join(cat, file_name)
        with open(full_path, 'w') as f:
            f.write(self.ui.txt_sms_num.toPlainText())
        self.response_decode((6, file_name))

    def save_as(self):
        file_name = QtGui.QFileDialog.getSaveFileName(
            self, "Сохранить файл с номерами как", "", "text file (*.txt)")
        cat = os.path.split(os.path.abspath(__file__))[0]
        full_path = os.path.join(cat, file_name)
        with open(full_path, 'w') as f:
            f.write(self.ui.txt_sms_num.toPlainText())
        self.response_decode((6, file_name))

    def clear_numbers(self):
        self.ui.txt_sms_num.clear()

    def prefs_open(self):
        if self.prefs_window is None:
            self.prefs = Preferences(self.config)
            self.connect(self.prefs, QtCore.SIGNAL('config(PyQt_PyObject)'),
                         self.reload_config)
            self.connect(self.prefs, QtCore.SIGNAL("response(PyQt_PyObject)"),
                         self.response_decode)
            self.prefs.show()

    def reload_config(self, config):
        self.config = config

    def sanitarize_numbers(self):
        pattern = re.compile(r'\d+', flags=re.IGNORECASE)

        numbers = list(self.ui.txt_sms_num.toPlainText().split('\n'))

        phone_numbers = []
        for number in numbers:
            digits = re.findall(pattern, number)
            fixed_number = ''
            if len(digits) > 1:
                for digit in digits:
                    fixed_number += digit
                phone_numbers.append(fixed_number)
            elif len(digits) == 1:
                phone_numbers.append(digits[0])
        return phone_numbers

    def sanitarize_text(self):
        text = self.ui.txt_sms_text.toPlainText()
        pattern = re.compile(r'([\"\'])', flags=re.IGNORECASE)
        r_pattern = re.compile(r'[\"\']', flags=re.IGNORECASE)
        index = re.findall(pattern, text)

        if len(index) != 0:
            for i in range(1, len(index) + 1):
                print(i % 2)
                if i % 2 == 1:
                    text = re.sub(r_pattern, "<<", text, 1)
                elif i % 2 == 0:
                    text = re.sub(r_pattern, ">>", text, 1)
        return text

    def send(self):
        # Следующие аргументы должны быть загружены из файла в момент инициализации!!!
        numbers = list(self.ui.txt_sms_num.toPlainText().split('\n'))
        sms_text = self.ui.txt_sms_text.toPlainText()

        if self.config['sanitarize'] == 'true':
            numbers = self.sanitarize_numbers()
            sms_text = self.sanitarize_text()
        if numbers[0] == '':
            self.ui.txt_log.insertPlainText(
                'Не указано ни одного номера телефона для отправки!\n')
        else:
            print(sms_text)
            self.GSM = GSMGateway(
                self.loop, (self.config['username'], self.config['password']),
                self.config['gateway'],
                SIMSlot=self.config['simslot'],
                numbers_list=numbers,
                text=sms_text)
            self.connect(self.GSM, QtCore.SIGNAL("response(PyQt_PyObject)"),
                         self.response_decode)
            self.GSM.start()

    def response_decode(self, response):
        stage, data = response
        if stage == 0:
            if data == 'Connection established':
                self.ui.txt_log.insertPlainText(
                    '\nСоединение с шлюзом установлено успешно.')
            else:
                self.ui.txt_log.insertPlainText(
                    '\nНевозможно установить соединение со шлюзом.')
        elif stage == 1:
            if 'Success' in data:
                self.ui.txt_log.insertPlainText('\nДанные авторизации приняты')
            else:
                self.ui.txt_log.insertPlainText(
                    '\nШлюз отверг запрос авторизации')
        elif stage == 2:
            pattern = re.compile(r"\w+:\s?(\d+)", flags=re.IGNORECASE)
            if 'failed' in data:
                number = re.findall(pattern, data)[0]
                self.ui.txt_log.insertPlainText(
                    '\nОшибка отправки СМС на номер: %s' % number)
            elif 'Response: Follows' in data:
                number = re.findall(pattern, data)[0]
                self.ui.txt_log.insertPlainText(
                    '\nСМС отправлена на номер: %s' % number)
        #-------------------------------------------------------------------------------------
        elif stage == 5:
            self.ui.txt_log.insertPlainText(
                '\nЗагружен файл списка номеров: %s' % data)
        elif stage == 6:
            self.ui.txt_log.insertPlainText(
                '\nСохранен файл списка номеров: %s' % data)
        elif stage == 7:
            self.ui.txt_log.insertPlainText('\nФайл настроек изменен: %s' %
                                            data)
예제 #30
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.last_row = 0

        # signal connections
        self.ui.cb_p.currentTextChanged.connect(self.set_S)
        self.ui.cb_S.currentTextChanged.connect(self.set_N)
        self.ui.cb_S.currentTextChanged.connect(self.set_m)
        self.ui.cb_m.currentTextChanged.connect(self.set_n)
        self.ui.pushButton.clicked.connect(self.fill_r_col)
        self.ui.table.cellClicked.connect(self.fill_c_col)
        self.ui.saveButton.clicked.connect(self.saveTable)

        self.set_p()
        self.setup_table()

    def set_p(self):
        for i in [2, 3, 5, 7, 11, 13]:
            self.ui.cb_p.addItem(str(i))

    def set_S(self, p):
        S_arr = get_S(int(p))
        self.ui.cb_S.clear()
        for S in S_arr:
            self.ui.cb_S.addItem(str(S))

    def set_N(self, S):
        if not S:
            return

        N = get_N(int(self.ui.cb_p.currentText()), int(S))
        self.ui.N_placeholder.setText(str(N))

    def set_m(self, S):
        if not S:
            return

        m_arr = get_m(int(S))
        self.ui.cb_m.clear()
        for m in m_arr:
            self.ui.cb_m.addItem(str(m))

    def set_n(self, m):
        if not m:
            return

        n = int(self.ui.cb_S.currentText()) // int(m)
        self.ui.n_placeholder.setText(str(n))

    def setup_table(self):
        self.ui.table.setColumnCount(8)
        self.ui.table.setHorizontalHeaderLabels([
            'r',
            'r в p-ичной',
            'g(r)',
            'C1',
            # 'C1 в p-ичной',
            'g(C1)',
            'C2',
            'C3',
            'C3 в p-ичной'
        ])
        self.ui.table.verticalHeader().setVisible(False)
        self.ui.table.setSelectionMode(
            QtWidgets.QAbstractItemView.SingleSelection)
        self.ui.table.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)

    def calculateButtonClick(self):
        self.ui.pushButton.setText('Идет расчет данных')
        self.fill_r_col()

    def fill_r_col(self):
        if not self.ui.cb_m.currentText():
            return

        self.ui.table.clearContents()

        self.ui.table.setRowCount(0)

        m = int(self.ui.cb_m.currentText())
        p = int(self.ui.cb_p.currentText())
        r_arr = get_r(p, m)
        i = -1
        for i, (r, r_p, g_r_p) in enumerate(r_arr):
            self.ui.table.setRowCount(i + 1)
            self.ui.table.setItem(i, 0, QtWidgets.QTableWidgetItem(str(r)))
            self.ui.table.setItem(i, 1, QtWidgets.QTableWidgetItem(str(r_p)))
            self.ui.table.setItem(i, 2, QtWidgets.QTableWidgetItem(str(g_r_p)))

        if i > -1:
            self.last_row = max(i, self.last_row)

        self.ui.pushButton.setText('Рассчитать значения')

    def fill_c_col(self, x, y):
        gray_color = QtGui.QColor("#f0fcf2")
        if y != 0:
            print(x, y)
            return

        self.ui.table.removeColumn(7)
        self.ui.table.removeColumn(6)
        self.ui.table.removeColumn(5)
        self.ui.table.removeColumn(4)
        self.ui.table.removeColumn(3)

        self.ui.table.setRowCount(self.last_row + 1)

        self.ui.table.insertColumn(3)
        self.ui.table.insertColumn(4)
        self.ui.table.insertColumn(5)
        self.ui.table.insertColumn(6)
        self.ui.table.insertColumn(7)
        # self.ui.table.insertColumn(7)
        self.ui.table.setHorizontalHeaderItem(3,
                                              QtWidgets.QTableWidgetItem('C1'))
        # self.ui.table.setHorizontalHeaderItem(4, QtWidgets.QTableWidgetItem('C1 в p-ичной'))
        self.ui.table.setHorizontalHeaderItem(
            4, QtWidgets.QTableWidgetItem('g(C1)'))
        self.ui.table.setHorizontalHeaderItem(5,
                                              QtWidgets.QTableWidgetItem('C2'))
        self.ui.table.setHorizontalHeaderItem(6,
                                              QtWidgets.QTableWidgetItem('C3'))
        self.ui.table.setHorizontalHeaderItem(
            7, QtWidgets.QTableWidgetItem('C3 в p-ичной'))

        try:
            r = int(self.ui.table.item(x, y).text())
        except AttributeError:
            return

        p = int(self.ui.cb_p.currentText())
        s = int(self.ui.cb_S.currentText())
        m = int(self.ui.cb_m.currentText())

        c_arr = get_C1(r, p, s, m)
        i = -1
        for i, (c, c_p, g_c_p, c2) in enumerate(c_arr):
            if self.ui.table.rowCount() < i + 1:
                self.ui.table.setRowCount(i + 1)

            item = QtWidgets.QTableWidgetItem(str(c))
            self.ui.table.setItem(i, 3, item)

            # item = QtWidgets.QTableWidgetItem(str(c_p))
            # item.setBackground(gray_color)
            # self.ui.table.setItem(i, 4, item)

            item = QtWidgets.QTableWidgetItem(str(g_c_p))
            self.ui.table.setItem(i, 4, item)

            item = QtWidgets.QTableWidgetItem(str(c2))
            self.ui.table.setItem(i, 5, item)

        self.last_row = max(i, self.last_row)

        for i, val in enumerate(sorted(set(c2 for _, _, _, c2 in c_arr))):
            item = QtWidgets.QTableWidgetItem(str(val))
            item_p = QtWidgets.QTableWidgetItem(str(to_base(val, p)))
            self.ui.table.setItem(i, 6, item)
            self.ui.table.setItem(i, 7, item_p)

        self.ui.M_placeholder.setText(str(i + 1))

    def saveTable(self):
        self.ui.saveButton.setText('Идет сохранение таблицы')
        workbook = xlsxwriter.Workbook('table.xlsx')
        worksheet = workbook.add_worksheet('Table')
        bold = workbook.add_format({'bold': True})
        for col in range(self.ui.table.columnCount()):
            worksheet.write(0, col,
                            self.ui.table.horizontalHeaderItem(col).text(),
                            bold)
        for row in range(self.ui.table.rowCount()):
            for col in range(self.ui.table.columnCount()):
                if self.ui.table.item(row, col):
                    worksheet.write(row + 1, col,
                                    int(self.ui.table.item(row, col).text()))
                else:
                    worksheet.write(row + 1, col, '-')
        workbook.close()
        self.ui.saveButton.setText('Сохранить таблицу в table.xlsx')
예제 #31
0
class ApplicationWindow(QtWidgets.QMainWindow):
    sampleRate = 44100
    length = 1

    def __init__(self):
        super(ApplicationWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def Csound(self):
        self.frequency = 430.81
        self.PianoSound(self.frequency)

    def Dsound(self):
        self.frequency = 546.83
        self.PianoSound(self.frequency)

    def Esound(self):
        self.frequency = 664.81
        self.PianoSound(self.frequency)

    def Fsound(self):
        self.frequency = 694.61
        self.PianoSound(self.frequency)

    def Gsound(self):
        self.frequency = 736
        self.PianoSound(self.frequency)

    def Asound(self):
        self.frequency = 780
        self.PianoSound(self.frequency)

    def Bsound(self):
        self.frequency = 846.93
        self.PianoSound(self.frequency)

    def C1sound(self):
        self.frequency = 891.63
        self.PianoSound(self.frequency)

    def D1sound(self):
        self.frequency = 953.66
        self.PianoSound(self.frequency)

    def E1sound(self):
        self.frequency = 1000.63
        self.PianoSound(self.frequency)

    def F1sound(self):
        self.frequency = 1049.23
        self.PianoSound(self.frequency)

    def G1sound(self):
        self.frequency = 1100
        self.PianoSound(self.frequency)

    def A1sound(self):
        self.frequency = 1160
        self.PianoSound(self.frequency)

    def B1sound(self):
        self.frequency = 1233.88
        self.PianoSound(self.frequency)

    def PianoSound(self, frequency):
        time = np.linspace(0, self.length, self.sampleRate * self.length)
        Y = np.sin(2 * np.pi * self.frequency * time) * np.exp(
            -0.0004 * 2 * np.pi * self.frequency * time)
        Y += np.sin(2 * 2 * np.pi * self.frequency * time) * np.exp(
            -0.0004 * 2 * np.pi * self.frequency * time) / 2
        Y += np.sin(3 * 2 * np.pi * self.frequency * time) * np.exp(
            -0.0004 * 2 * np.pi * self.frequency * time) / 4
        Y += np.sin(4 * 2 * np.pi * self.frequency * time) * np.exp(
            -0.0004 * 2 * np.pi * self.frequency * time) / 8
        Y += np.sin(5 * 2 * np.pi * self.frequency * time) * np.exp(
            -0.0004 * 2 * np.pi * self.frequency * time) / 16
        Y += np.sin(6 * 2 * np.pi * self.frequency * time) * np.exp(
            -0.0004 * 2 * np.pi * self.frequency * time) / 32
        Y += Y * Y * Y
        Y *= 1 + 16 * time * np.exp(-6 * time)

        wavfile.write('Piano.wav', self.sampleRate, Y)
        playsound('Piano.wav')

    def Eguitar(self):
        self.frequency = 329.63
        self.GuitarSound(self.frequency)

    def Bguitar(self):
        self.frequency = 246.94
        self.GuitarSound(self.frequency)

    def Gguitar(self):
        self.frequency = 196
        self.GuitarSound(self.frequency)

    def Dguitar(self):
        self.frequency = 146.83
        self.GuitarSound(self.frequency)

    def Aguitar(self):
        self.frequency = 110
        self.GuitarSound(self.frequency)

    def E2guitar(self):
        self.frequency = 82.41
        self.GuitarSound(self.frequency)

    def GuitarSound(self, frequency):
        samples = []
        current_sample = 0
        previous_value = 0

        wavetable_size = self.sampleRate // int(self.frequency)
        wavetable = (2 * np.random.randint(0, 2, wavetable_size) - 1).astype(
            np.float)
        n_samples = self.sampleRate * 2
        while len(samples) < n_samples:
            wavetable[current_sample] = 0.5 * (wavetable[current_sample] +
                                               previous_value)
            samples.append(wavetable[current_sample])
            previous_value = samples[-1]
            current_sample += 1
            current_sample = current_sample % wavetable.size
        data = np.array(samples)
        wavfile.write('guitar.wav', self.sampleRate, data)
        playsound('guitar.wav')
예제 #32
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # connected run_alg to btn
        self.ui.pushButton.clicked.connect(self.run_alg)

    def run_alg(self):
        #сохраняем все введенные данные
        try:
            global alphabet
            alphabet = funcs.get_set_of_alphabet(
                self.ui.alphabetText.toPlainText())
            global input_word
            input_word = self.ui.inputText.toPlainText()
            global scheme
            scheme = funcs.get_dict_scheme(self.ui.schemeText.toPlainText())

            #проверяем соответствует ли схема и вход. слово алфавиту
            if self.check_all_input_data():
                self.clear_styles()
                resText = ""
                words = funcs.do_scheme(scheme, input_word)
                for word in words:
                    resText += word + "\n"
                self.ui.resultText.setText(resText)

        except funcs.NoArrowException as exc:
            self.ui.resultText.setText("У подстановки нет стрелки перехода!")
            self.ui.schemeText.setStyleSheet(
                "border: 2px solid red; color: red;")
        except funcs.InvalidSubException as exc:
            self.ui.resultText.setText("Подстановка имеет неверный формат!")
            self.ui.schemeText.setStyleSheet(
                "border: 2px solid red; color: red;")

    def check_all_input_data(self) -> bool:
        isInputWordCorrect = True
        isSchemeCorrect = True
        for ch in input_word:
            if not (ch in alphabet):
                self.ui.inputText.setStyleSheet(
                    "border: 2px solid red; color: red;")
                self.ui.resultText.setText(
                    "Входное слово имеет неверный формат!")
                isInputWordCorrect = False
        for key, value in scheme.items():
            for ch in key:
                if not (ch in alphabet):
                    self.ui.schemeText.setStyleSheet(
                        "border: 2px solid red; color: red;")
                    self.ui.resultText.setText("Схема имеет неверный формат!")
                    isSchemeCorrect = False
            for ch in value:
                if not (ch in alphabet) and ch != '.':
                    self.ui.schemeText.setStyleSheet(
                        "border: 2px solid red; color: red;")
                    self.ui.resultText.setText("Схема имеет неверный формат!")
                    isSchemeCorrect = False
        return isInputWordCorrect and isSchemeCorrect

    def clear_styles(self):
        self.ui.schemeText.setStyleSheet("")
        self.ui.inputText.setStyleSheet("")
class Mywindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Mywindow, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.pushButton_Encrypt.clicked.connect(self.encryption)
        self.ui.pushButton_Decrypt.clicked.connect(self.decryption)
        self.ui.pushButton_SavetoFile.clicked.connect(self.writeFile)
        self.ui.pushButton_ReadfromFile.clicked.connect(self.readFile)

        self.ui.action_AboutDev.triggered.connect(self.openAboutDev)
        self.ui.action_Help.triggered.connect(self.openHelp)

        def openMenu(position):

            menu = QMenu()
            quitAction = menu.addAction("Quit")
            action = menu.exec_(tableWidget.mapToGlobal(position))
            if action == quitAction:
                qApp.quit()

    def encryption(self):
        print("begin - encr")
        text = str(self.ui.plainTextEdit_Encr.toPlainText())
        print(text)
        text = re.sub(r'\W+', '', text)
        if (text.__len__() % 6 != 0):
            trashVal = math.ceil(text.__len__() / 6) * 6 - text.__len__()
            print(trashVal)
            for x in range(trashVal):
                text += random.choice(string.ascii_letters)
        print(text)
        encrypt = ""
        for x in range(6):
            encrypt += text[x::6]
        print(encrypt)
        self.ui.textBrowser_Encrypt.setText(encrypt)

    def decryption(self):
        print("begin - decr")
        text = self.ui.plainTextEdit_Decr.toPlainText()
        decrypt = ""
        for x in range(math.ceil(text.__len__() / 6)):
            decrypt += text[x::math.ceil(text.__len__() / 6)]
        print(decrypt)
        self.ui.textBrowser_Decrypt.setText(decrypt)

    def openAboutDev(self):
        self.application1 = AboutDevWindow()
        self.application1.show()

    def openHelp(self):
        self.application1 = HelpWindow()
        self.application1.show()

    def writeFile(self):
        with open("savedFile.txt", "w") as file:
            file.write(self.ui.textBrowser_Decrypt.toPlainText())

    def readFile(self):
        with open("readFile.txt", "r") as file:
            text = str(file.readlines())
        text = re.sub(r'\W+', '', text)
        print(text)
        if (text.__len__() % 6 != 0):
            trashVal = math.ceil(text.__len__() / 6) * 6 - text.__len__()
            for x in range(trashVal):
                text += random.choice(string.ascii_letters)
        encrypt = ""
        for x in range(6):
            encrypt += text[x::6]
        self.ui.textBrowser_Encrypt.setText(encrypt)