def populate_table(self, data):
        for (food_name, price, category_name) in data:
            self.table.insertRow(self.table.rowCount())

            self.table.setItem(self.table.rowCount() - 1, 0, QTableWidgetItem(str(food_name)))
            self.table.setItem(self.table.rowCount() - 1, 1, QTableWidgetItem(str(category_name)))
            self.table.setItem(self.table.rowCount() - 1, 2, QTableWidgetItem(str(price)))
            # self.table.setItem(self.table.rowCount() - 1, 3, QTableWidgetItem(str(bonus)))
            # self.table.setItem(self.table.rowCount() - 1, 3, QTableWidgetItem(str(joining_date.strftime("%d-%m-%Y"))))
            edit = QPushButton(self.table)
            edit.setObjectName(str(food_name))
            edit.setStyleSheet("background-color: rgb(50,205,50);")
            edit.setText("Edit")
            edit.adjustSize()
            edit.clicked.connect(self.edit_menu)

            self.table.setCellWidget(self.table.rowCount() - 1, 3, edit)

            delete = QPushButton(self.table)
            delete.setObjectName(str(food_name))
            delete.setStyleSheet("background-color: #d63447;")
            delete.setText("Delete")
            delete.adjustSize()
            delete.clicked.connect(self.delete_menu)
            # delete.mousePressEvent = functools.partial(self.delete_menu, source_object=delete)
            self.table.setCellWidget(self.table.rowCount() - 1, 4, delete)
Example #2
0
class mainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.title = "First Window"
        self.setFixedSize(int(user32.GetSystemMetrics(0)*.75), int(user32.GetSystemMetrics(1)*.75))


        self.pushButton1 = QPushButton("Load an Image", self)
        self.pushButton1.move(int((user32.GetSystemMetrics(0)*.75)/4), int((user32.GetSystemMetrics(1)*.75)/2))
        self.pushButton1.adjustSize()


        self.pushButton2 = QPushButton("Take Picture", self)
        self.pushButton2.move(int((3*user32.GetSystemMetrics(0)*.75)/4), int((user32.GetSystemMetrics(1)*.75)/2))
        self.pushButton2.adjustSize()

        self.pushButton1.clicked.connect(self.toggleLoadImageWindow)
        self.pushButton2.clicked.connect(self.toggleTakeImageWindow)              # <===
        self.main_window()

    def main_window(self):
        self.setWindowTitle(self.title)
        self.show()

    def toggleLoadImageWindow(self):                                             # <===
        self.w = LoadImageWindow()
        self.w.show()
        self.hide()

    def toggleTakeImageWindow(self):                                             # <===
        self.w = TakeImageWindow()
        self.w.show()
        self.hide()
Example #3
0
    def populate_table(self, data):
        for (id, table_number, covers) in data:
            self.table.insertRow(self.table.rowCount())

            self.table.setItem(self.table.rowCount() - 1, 0,
                               QTableWidgetItem(str(table_number)))
            self.table.setItem(self.table.rowCount() - 1, 1,
                               QTableWidgetItem(str(covers)))

            edit = QPushButton(self.table)
            edit.setObjectName(str(id))
            edit.setStyleSheet("background-color: rgb(50,205,50);")
            edit.setText("Edit")
            edit.adjustSize()
            edit.clicked.connect(self.edit_tables)

            self.table.setCellWidget(self.table.rowCount() - 1, 2, edit)

            delete = QPushButton(self.table)
            delete.setObjectName(str(id))
            delete.setStyleSheet("background-color: #d63447;")
            delete.setText("Delete")
            delete.adjustSize()
            delete.clicked.connect(self.delete_tables)
            # delete.mousePressEvent = functools.partial(self.delete_emp, source_object=delete)
            self.table.setCellWidget(self.table.rowCount() - 1, 3, delete)
Example #4
0
    def populate_table(self, data):
        for (id, employee_name, job_title, salary, joining_date) in data:
            self.table.insertRow(self.table.rowCount())

            self.table.setItem(self.table.rowCount() - 1, 0,
                               QTableWidgetItem(str(employee_name)))
            self.table.setItem(self.table.rowCount() - 1, 1,
                               QTableWidgetItem(str(job_title)))
            self.table.setItem(
                self.table.rowCount() - 1, 2,
                QTableWidgetItem(str(salary.strftime("%d-%m-%Y"))))
            # self.table.setItem(self.table.rowCount() - 1, 3, QTableWidgetItem(str(bonus)))
            self.table.setItem(self.table.rowCount() - 1, 3,
                               QTableWidgetItem(str(joining_date)))

            edit = QPushButton(self.table)
            edit.setObjectName(str(id))
            edit.setStyleSheet("background-color: rgb(50,205,50);")
            edit.setText("Edit")
            edit.adjustSize()
            edit.clicked.connect(self.edit_reservation)

            self.table.setCellWidget(self.table.rowCount() - 1, 4, edit)

            delete = QPushButton(self.table)
            delete.setObjectName(str(id))
            delete.setStyleSheet("background-color: #d63447;")
            delete.setText("Delete")
            delete.adjustSize()
            delete.clicked.connect(self.delete_reservation)
            # delete.mousePressEvent = functools.partial(self.delete_emp, source_object=delete)
            self.table.setCellWidget(self.table.rowCount() - 1, 5, delete)
Example #5
0
class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(300, 300, 700, 600)
        self.setWindowTitle('Git и случайные окружности')
        self.pushButton = QPushButton('СОЗДАТЬ ОКРУЖНОСТИ', self)
        self.pushButton.adjustSize()
        self.pushButton.move(10, 10)
        self.pushButton.clicked.connect(self.create_circles)
        self.pressed = False

    def create_circles(self):
        self.pressed = True
        self.update()

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        self.drawFlag(qp)
        qp.end()

    def drawFlag(self, qp):
        if not self.pressed:
            return True
        for i in range(random.randint(10, 25)):
            size = random.randint(30, 90)
            x, y = random.randint(50, 600), random.randint(50, 500)
            qp.setBrush(
                QColor(random.randint(0, 255), random.randint(0, 255),
                       random.randint(0, 255)))
            qp.drawEllipse(x, y, size, size)
Example #6
0
    def initUI(self):
        self.setWindowTitle("查看回收站文件夹内容")
        self.form = QVBoxLayout()
        for item in iter(self.files):
            ico = QPushButton(set_file_icon(item.name), item.name)
            ico.setStyleSheet(
                "QPushButton {border:none; background:transparent; color:black;}"
            )
            ico.adjustSize()
            it = QLabel(f"<font color='#CCCCCC'>({item.size})</font>")
            hbox = QHBoxLayout()
            hbox.addWidget(ico)
            hbox.addStretch(1)
            hbox.addWidget(it)
            self.form.addLayout(hbox)

        self.form.setSpacing(10)
        self.buttonBox = QDialogButtonBox()
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(QDialogButtonBox.Close)
        self.buttonBox.button(QDialogButtonBox.Close).setText("关闭")
        self.buttonBox.setStyleSheet(btn_style)
        self.buttonBox.rejected.connect(self.reject)

        vbox = QVBoxLayout()
        vbox.addLayout(self.form)
        vbox.addStretch(1)
        vbox.addWidget(self.buttonBox)
        self.setLayout(vbox)
Example #7
0
class Main_Auth(QWidget):  # Главное окно с которого начинается работа приложения,
    def __init__(self):  # Инициализация
        self.AuthWind = 0
        self.RegistrWind = 0
        super(Main_Auth, self).__init__()  # Наследование от окна и его инициализация

        self.layout = QVBoxLayout()  # Создание лэйаута
        self.layout.addWidget(MyBar(self))  # Добавление специального класса в лэйаут
        self.setLayout(self.layout)  # Изменение лэйаута в основном окне
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addStretch(-1)
        self.setMinimumSize(800, 400)  # Изменение минимального размера окна
        self.resize(1080, 720)  # Изменение размера окна
        self.setWindowFlags(Qt.FramelessWindowHint)  # изменение конфига титульных кнопок
        self.pressing = False

        self.label = QLabel(self)  # Создаем лейбл(для фона)
        self.Auth = QPushButton(self)  # Создаем кнопку для авторизации
        self.Registration = QPushButton(self)  # Создаем кнопку для регистрации

        self.font = QFont()  # Создаем объект шрифта
        self.font.setFamily("Roboto Light")  # Изменяем семейство шрифта
        self.font.setPointSize(22)  # Изменяем размер шрифта

        self.db = DB()

        self.setupUi()  # вызов метода с основной работой

        self.Auth.clicked.connect(self.showWindowAuth)
        self.Registration.clicked.connect(self.showWindowRegistration)
        self.Registration.setStyleSheet(bR)  # Изменяем стили на написанные и импортированные заранее
        self.setWindowTitle("Окно")  # Изменение названия титульного окна

    def setupUi(self):  # Основной метод
        self.label.setGeometry(QRect(0, 0, 801, 571))
        self.label.setPixmap(QPixmap(bM))  # Загружаем фотографию
        self.label.setScaledContents(True)  # Изменяем(разрешаем) динамичное подстраивание фотографии под размер окна
        self.Auth.setText('Авторизация')  # Изменяем текст кнопки
        self.Auth.setFont(self.font)  # Изменяем шрифт текста в кнопке на объект который создавали ранее
        self.Auth.adjustSize()  # Позволяем кнопке подстроить свой размер по размеру объекта в нем(текст, фото)
        self.Auth.setStyleSheet(bA)  # Изменяем стили на написанные и импортированные заранее
        self.Auth.move(self.width() // 2 - self.Auth.width() // 2, self.height() // 2 - self.Auth.height() // 2)  # ->
        # Перемещаем кнопку в середину экрана
        self.Registration.setText('Регистрация')  # Изменяем текст кнопки
        self.Registration.setFont(self.font)  # Изменяем шрифт текста в кнопке на объект который создавали ранее
        self.Registration.adjustSize()  # Позволяем кнопке подстроить свой размер по размеру объекта в нем(текст, фото)
        self.Registration.move(self.width() // 2 - self.Auth.width() // 2,
                               self.height() // 2 - self.Auth.height() // 2 + 80)

    def showWindowAuth(self):  # функция для показа окна авторизации
        self.AuthWind = AuthWindow(self)
        self.AuthWind.show()

    def showWindowRegistration(self):  # функция для показа окна регистрации
        self.RegistrWind = RegistrationWindow(self)
        self.RegistrWind.show()
Example #8
0
class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'Multiplication'
        self.left = 10
        self.top = 10
        self.width = 400
        self.height = 300
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Making the Text Boxes
        self.n1 = QLineEdit(self)
        self.n1.move(20, 30)
        self.n1.resize(240, 40)

        self.n1l = QLabel("Enter number 1",self)
        self.n1l.move(20,5)


        self.n2 = QLineEdit(self)
        self.n2.move(20, 100)
        self.n2.resize(240, 40)

        self.n2l = QLabel("Enter number 2",self)
        self.n2l.move(20,75)


        # Making The Button
        self.button = QPushButton("Press To Multiply", self)
        self.button.move(20, 150)

        # Linking to the funtion
        self.button.clicked.connect(self.onclick)
        self.button.adjustSize()

        self.show()

    @pyqtSlot()
    def onclick(self):
        #Making Variable
        n1value = int(self.n1.text())
        n2value = int(self.n2.text())
        multiplied = str(n1value * n2value)

        #Puting it in a messagebox
        QMessageBox.question(self, "Multiplying", str(n1value) + " X " + str(n2value) + " = " + multiplied, QMessageBox.Ok,
                             QMessageBox.Ok)
Example #9
0
    def make_gui(self):
        self.name = None
        self.setStyleSheet(
            "color:white; background-color: black; border-style: none")
        self.showFullScreen()
        self.setCursor(Qt.BlankCursor)

        stretchval = 10

        self.line = QLineEdit()
        self.line.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.line.setAlignment(Qt.AlignCenter)
        self.line.adjustSize()
        self.line.setStyleSheet(
            "font: bold; font-size: 46px; font-family: Arial")
        self.line.setCursor(Qt.BlankCursor)
        self.line.setMinimumWidth(self.config['camera']['screen_wh'][0])

        hbox = QHBoxLayout()
        hbox.addWidget(self.line, stretchval, Qt.AlignCenter)
        hbox.setAlignment(Qt.AlignCenter)
        hbox.setContentsMargins(0, self.config['camera']['screen_wh'][1] / 12,
                                0, self.config['camera']['screen_wh'][1] / 12)

        vbox = QVBoxLayout()
        vbox.addLayout(hbox, stretchval)
        vbox.setContentsMargins(0, 0, 0, 0)

        keys = [
            ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '<'],
            ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '+'],
            ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', '_', '-'],
            ['@', 'z', 'x', 'c', 'v', 'b', 'n', 'm', '.', ''],
        ]

        for row in keys:
            rowlayout = QHBoxLayout()
            rowlayout.setContentsMargins(0, 0, 0, 0)
            for letter in row:
                klwidget = QPushButton(letter)
                klwidget.clicked.connect(self.on_button_press)
                klwidget.setStyleSheet("QPushButton {padding: 0;}")
                klwidget.setStyleSheet("font: bold; font-size: 44px")
                klwidget.setMinimumWidth(
                    self.config['camera']['screen_wh'][1] / 12)
                klwidget.setMinimumHeight(
                    self.config['camera']['screen_wh'][1] / 6)
                klwidget.adjustSize()
                rowlayout.addWidget(klwidget, stretchval, Qt.AlignBottom)
            vbox.addLayout(rowlayout, stretchval)

        self.setLayout(vbox)
Example #10
0
    def __init__(self, parent):
        super().__init__(
            None,
        )  #Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint)
        self.setAttribute(Qt.WA_DeleteOnClose, False)
        main_layout = QVBoxLayout(self)
        self.parent_widget = parent
        self.url_inserter = QLineEdit()
        self.url_inserter.setPlaceholderText("Hover to see supported URLs")
        self.url_inserter.setToolTip(app_constants.SUPPORTED_DOWNLOAD_URLS)
        self.url_inserter.setToolTipDuration(999999999)
        self.url_inserter.returnPressed.connect(self.add_download_entry)
        main_layout.addWidget(self.url_inserter)
        self.info_lbl = QLabel(self)
        self.info_lbl.setAlignment(Qt.AlignCenter)
        main_layout.addWidget(self.info_lbl)
        self.info_lbl.hide()
        buttons_layout = QHBoxLayout()
        url_window_btn = QPushButton('Batch URLs')
        url_window_btn.adjustSize()
        url_window_btn.setFixedWidth(url_window_btn.width())
        self._urls_queue = []

        def batch_url_win():
            self._batch_url = GalleryDownloaderUrlExtracter()
            self._batch_url.url_emit.connect(
                lambda u: self._urls_queue.append(u))
            self._batch_url.url_emit.connect(lambda u: self.info_lbl.setText(
                "<font color='green'>Adding URLs to queue...</font>")
                                             if u else None)

        url_window_btn.clicked.connect(batch_url_win)
        clear_all_btn = QPushButton('Clear List')
        clear_all_btn.adjustSize()
        clear_all_btn.setFixedWidth(clear_all_btn.width())
        buttons_layout.addWidget(url_window_btn, 0, Qt.AlignLeft)
        buttons_layout.addWidget(clear_all_btn, 0, Qt.AlignRight)
        main_layout.addLayout(buttons_layout)
        self.download_list = GalleryDownloaderList(parent, self)
        clear_all_btn.clicked.connect(self.download_list.clear_list)
        download_list_scroll = QScrollArea(self)
        download_list_scroll.setBackgroundRole(self.palette().Base)
        download_list_scroll.setWidgetResizable(True)
        download_list_scroll.setWidget(self.download_list)
        main_layout.addWidget(download_list_scroll, 1)
        self.resize(480, 600)
        self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH))

        self._url_checker = QTimer(self)
        self._url_checker.timeout.connect(
            lambda: self.add_download_entry(extractor=True))
        self._url_checker.start(500)
Example #11
0
 def __init__(self, parent=None):
     super().__init__(parent, flags=Qt.Window | Qt.WindowStaysOnTopHint)
     self.main_layout = QVBoxLayout(self)
     self.text_area = QPlainTextEdit(self)
     self.text_area.setPlaceholderText("URLs are seperated by a newline")
     self.main_layout.addWidget(self.text_area)
     self.text_area.setWordWrapMode(QTextOption.NoWrap)
     add_to_queue = QPushButton('Add to queue')
     add_to_queue.adjustSize()
     add_to_queue.setFixedWidth(add_to_queue.width())
     add_to_queue.clicked.connect(self.add_to_queue)
     self.main_layout.addWidget(add_to_queue, 0, Qt.AlignRight)
     self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH))
     self.show()
    def __init__(self):
        QWidget.__init__(self)

        self.resize(400, 400)
        self.setWindowTitle("DNN - Object Classifier")
        
        vbox = QVBoxLayout(self)
        vbox.setAlignment(Qt.AlignTop)


        self.txt_input_file = QLabel("")
        btn_select_video = QPushButton("Select Video")
        btn_select_video.clicked.connect(self.select_video_file)

        vbox.addWidget(QLabel("Input Video File:"))
        h1 = QHBoxLayout()
        h1.addWidget(self.txt_input_file)
        h1.addWidget(btn_select_video), btn_select_video.adjustSize()
        vbox.addLayout(h1)


        self.txt_single_path = QLabel("")
        btn_select_frames = QPushButton("Select Folder")
        btn_select_frames.clicked.connect(self.select_output_folder)

        vbox.addWidget(QLabel("Output Single Raw Frames Path:"))
        h2 = QHBoxLayout()
        h2.addWidget(self.txt_single_path)
        h2.addWidget(btn_select_frames), btn_select_frames.adjustSize()
        vbox.addLayout(h2)
        

        self.txt_output_folder_path = QLabel("")
        btn_select_detections = QPushButton("Select Folder")
        btn_select_detections.clicked.connect(self.select_detections_folder)

        vbox.addWidget(QLabel("Output Detections Path:"))
        h3 = QHBoxLayout()
        h3.addWidget(self.txt_output_folder_path)
        h3.addWidget(btn_select_detections), btn_select_detections.adjustSize()
        vbox.addLayout(h3)

        btn_run = QPushButton("Run")
        btn_run.clicked.connect(self.run_detections)
        vbox.addWidget(btn_run)
        
        self.txt_status = QLabel("")
        vbox.addWidget(self.txt_status)
        
        self.show()
Example #13
0
	def __init__(self, parent=None):
		super().__init__(parent, flags=Qt.Window|Qt.WindowStaysOnTopHint)
		self.main_layout = QVBoxLayout(self)
		self.text_area = QPlainTextEdit(self)
		self.text_area.setPlaceholderText("URLs are seperated by a newline")
		self.main_layout.addWidget(self.text_area)
		self.text_area.setWordWrapMode(QTextOption.NoWrap)
		add_to_queue = QPushButton('Add to queue')
		add_to_queue.adjustSize()
		add_to_queue.setFixedWidth(add_to_queue.width())
		add_to_queue.clicked.connect(self.add_to_queue)
		self.main_layout.addWidget(add_to_queue, 0, Qt.AlignRight)
		self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH))
		self.show()
Example #14
0
 def __init__(self):
     super().__init__()
     
     self.setWindowTitle("DotBot")
     self.setFixedSize(int(user32.GetSystemMetrics(0)*.75), int(user32.GetSystemMetrics(1)*.75))
     self.nameLabel = QLabel(self)
     self.nameLabel.setText('Enter Image Path:')
     self.nameLabel.move(int((user32.GetSystemMetrics(0)*.75)/4), int((user32.GetSystemMetrics(1)*.75)/2))  
     self.nameLabel.adjustSize()      
     self.line = QLineEdit(self)
     self.line.move(int((user32.GetSystemMetrics(0)*.75)/2), int((user32.GetSystemMetrics(1)*.75)/2))
     pybutton = QPushButton('Continue', self)
     pybutton.clicked.connect(self.clickMethod)
     pybutton.adjustSize()
     pybutton.move(int(user32.GetSystemMetrics(0)*.65), int(user32.GetSystemMetrics(1)*.65))        
Example #15
0
    def clickButton(self, text='test', func=None, tip=None, X=200, Y=200):
        btn = QPushButton(text, self)
        btn.adjustSize()
        btn.move(X, Y)
        btn.setToolTip(tip)

        if isinstance(func, wrapper):

            def link():
                func.call()

            btn.clicked.connect(link)
        else:
            print("no function")
            pass
        return btn
Example #16
0
    def __init__(self, address):
        super().__init__()
       
        self.setWindowTitle("DotBot")
        self.setFixedSize(int(user32.GetSystemMetrics(0)*.75), int(user32.GetSystemMetrics(1)*.75))  
        self.central_widget = QWidget()               
        self.setCentralWidget(self.central_widget)    
        lay = QVBoxLayout(self.central_widget)

        label = QLabel(self)
        self.bgrImage = cv.imread(address)
        pixmap = QPixmap(address)
        
        pixmap2 = pixmap.scaled(int(user32.GetSystemMetrics(1)*.75), int(user32.GetSystemMetrics(1)*.75), Qt.KeepAspectRatio, Qt.FastTransformation)
        
        label.setPixmap(pixmap2)
        label.move(int((user32.GetSystemMetrics(0)*.75)), int((user32.GetSystemMetrics(1)*.75)))
        #self.resize(pixmap.width(), pixmap.height())

        lay.addWidget(label)

        self.widthLabel = QLabel(self)
        self.widthLabel.setText('Max Width (mm):')
        self.widthLabel.move(int((user32.GetSystemMetrics(0)*.45)), int((user32.GetSystemMetrics(1)*.36)-(.05*(user32.GetSystemMetrics(1)))))
        self.widthLabel.adjustSize()        
        self.lineWidth = QLineEdit(self)
        self.lineWidth.move(int((user32.GetSystemMetrics(0)*.52)), int((user32.GetSystemMetrics(1)*.36)-(.05*(user32.GetSystemMetrics(1)))))

        self.heightLabel = QLabel(self)
        self.heightLabel.setText('Max Height (mm):')
        self.heightLabel.move(int((user32.GetSystemMetrics(0)*.45)), int(user32.GetSystemMetrics(1)*.36)) 
        self.heightLabel.adjustSize()       
        self.lineHeight = QLineEdit(self)
        self.lineHeight.move(int((user32.GetSystemMetrics(0)*.52)), int(user32.GetSystemMetrics(1)*.36))

        self.spacingLabel = QLabel(self)
        self.spacingLabel.setText('Spacing (mm):')
        self.spacingLabel.move(int((user32.GetSystemMetrics(0)*.45)), int((user32.GetSystemMetrics(1)*.36)+(.05*(user32.GetSystemMetrics(1)))))
        self.spacingLabel.adjustSize()        
        self.lineSpacing = QLineEdit(self)
        self.lineSpacing.move(int((user32.GetSystemMetrics(0)*.52)), int((user32.GetSystemMetrics(1)*.36)+(.05*(user32.GetSystemMetrics(1)))))

        pybutton = QPushButton('Continue', self)
        pybutton.clicked.connect(self.clickMethod)
        pybutton.adjustSize()
        pybutton.move(int(user32.GetSystemMetrics(0)*.65), int(user32.GetSystemMetrics(1)*.65))  
        label.show()
Example #17
0
    def __init__(self, parent):
        super().__init__(
            None, Qt.CustomizeWindowHint | Qt.WindowTitleHint
            | Qt.WindowMinMaxButtonsHint)
        self.setAttribute(Qt.WA_DeleteOnClose)
        main_layout = QVBoxLayout(self)
        self.parent_widget = parent
        self.url_inserter = QLineEdit()
        self.url_inserter.setPlaceholderText("Hover to see supported URLs")
        self.url_inserter.setToolTip(app_constants.SUPPORTED_DOWNLOAD_URLS)
        self.url_inserter.setToolTipDuration(999999999)
        self.url_inserter.returnPressed.connect(self.add_download_entry)
        main_layout.addWidget(self.url_inserter)
        self.info_lbl = QLabel(self)
        self.info_lbl.setAlignment(Qt.AlignCenter)
        main_layout.addWidget(self.info_lbl)
        self.info_lbl.hide()
        buttons_layout = QHBoxLayout()
        url_window_btn = QPushButton('Batch URLs')
        url_window_btn.adjustSize()
        url_window_btn.setFixedWidth(url_window_btn.width())

        def batch_url_win():
            self._batch_url = GalleryDownloaderUrlExtracter()
            self._batch_url.url_emit.connect(self.add_download_entry)

        url_window_btn.clicked.connect(batch_url_win)
        clear_all_btn = QPushButton('Clear List')
        clear_all_btn.adjustSize()
        clear_all_btn.setFixedWidth(clear_all_btn.width())
        buttons_layout.addWidget(url_window_btn, 0, Qt.AlignLeft)
        buttons_layout.addWidget(clear_all_btn, 0, Qt.AlignRight)
        main_layout.addLayout(buttons_layout)
        self.download_list = GalleryDownloaderList(
            parent.manga_list_view.sort_model, self)
        clear_all_btn.clicked.connect(self.download_list.clear_list)
        download_list_scroll = QScrollArea(self)
        download_list_scroll.setBackgroundRole(self.palette().Base)
        download_list_scroll.setWidgetResizable(True)
        download_list_scroll.setWidget(self.download_list)
        main_layout.addWidget(download_list_scroll, 1)
        close_button = QPushButton('Close', self)
        close_button.clicked.connect(self.hide)
        main_layout.addWidget(close_button)
        self.resize(480, 600)
        self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH))
Example #18
0
    def __init__(self, parent):
        super().__init__(None,
                   )#Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint)
        self.setAttribute(Qt.WA_DeleteOnClose, False)
        main_layout = QVBoxLayout(self)
        self.parent_widget = parent
        self.url_inserter = QLineEdit()
        self.url_inserter.setPlaceholderText("Hover to see supported URLs")
        self.url_inserter.setToolTip(app_constants.SUPPORTED_DOWNLOAD_URLS)
        self.url_inserter.setToolTipDuration(999999999)
        self.url_inserter.returnPressed.connect(self.add_download_entry)
        main_layout.addWidget(self.url_inserter)
        self.info_lbl = QLabel(self)
        self.info_lbl.setAlignment(Qt.AlignCenter)
        main_layout.addWidget(self.info_lbl)
        self.info_lbl.hide()
        buttons_layout = QHBoxLayout()
        url_window_btn = QPushButton('Batch URLs')
        url_window_btn.adjustSize()
        url_window_btn.setFixedWidth(url_window_btn.width())
        self._urls_queue = []
        def batch_url_win():
            self._batch_url = GalleryDownloaderUrlExtracter()
            self._batch_url.url_emit.connect(lambda u: self._urls_queue.append(u))
            self._batch_url.url_emit.connect(lambda u: self.info_lbl.setText("<font color='green'>Adding URLs to queue...</font>") if u else None)
        url_window_btn.clicked.connect(batch_url_win)
        clear_all_btn = QPushButton('Clear List')
        clear_all_btn.adjustSize()
        clear_all_btn.setFixedWidth(clear_all_btn.width())
        buttons_layout.addWidget(url_window_btn, 0, Qt.AlignLeft)
        buttons_layout.addWidget(clear_all_btn, 0, Qt.AlignRight)
        main_layout.addLayout(buttons_layout)
        self.download_list = GalleryDownloaderList(parent, self)
        clear_all_btn.clicked.connect(self.download_list.clear_list)
        download_list_scroll = QScrollArea(self)
        download_list_scroll.setBackgroundRole(self.palette().Base)
        download_list_scroll.setWidgetResizable(True)
        download_list_scroll.setWidget(self.download_list)
        main_layout.addWidget(download_list_scroll, 1)
        self.resize(480,600)
        self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH))

        self._url_checker = QTimer(self)
        self._url_checker.timeout.connect(lambda: self.add_download_entry(extractor=True))
        self._url_checker.start(500)
Example #19
0
	def __init__(self, gallery, parent=None):
		super().__init__(parent)
		self.setWindowFlags(Qt.Window)

		self.current_chapters = len(gallery.chapters)
		self.added_chaps = 0

		layout = QFormLayout()
		self.setLayout(layout)
		lbl = QLabel('{} by {}'.format(gallery.title, gallery.artist))
		layout.addRow('Gallery:', lbl)
		layout.addRow('Current chapters:', QLabel('{}'.format(self.current_chapters)))

		new_btn = QPushButton('New')
		new_btn.clicked.connect(self.add_new_chapter)
		new_btn.adjustSize()
		add_btn = QPushButton('Finish')
		add_btn.clicked.connect(self.finish)
		add_btn.adjustSize()
		new_l = QHBoxLayout()
		new_l.addWidget(add_btn, alignment=Qt.AlignLeft)
		new_l.addWidget(new_btn, alignment=Qt.AlignRight)
		layout.addRow(new_l)

		frame = QFrame()
		frame.setFrameShape(frame.StyledPanel)
		layout.addRow(frame)

		self.chapter_l = QVBoxLayout()
		frame.setLayout(self.chapter_l)

		new_btn.click()

		self.setMaximumHeight(550)
		self.setFixedWidth(500)
		if parent:
			self.move(parent.window().frameGeometry().topLeft() +
				parent.window().rect().center() -
				self.rect().center())
		else:
			frect = self.frameGeometry()
			frect.moveCenter(QDesktopWidget().availableGeometry().center())
			self.move(frect.topLeft())
		self.setWindowTitle('Add Chapters')
Example #20
0
    def basicButton(self, text='test', func=None, tip=None, X=200, Y=200):
        btn = QPushButton(text, self)
        btn.adjustSize()
        btn.move(X, Y)
        btn.setToolTip(tip)

        if isinstance(func, wrapper):

            def link():
                func.call()

            # print("Calling wrapped function according to button press")
            btn.triggered.connect(link)
        # might need to be clicked instead of triggered
        elif func is not None:
            btn.clicked.connect(func)
        else:
            print("no function")
            pass
        return btn
Example #21
0
    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        startButton = QPushButton('Start', self)
        stopButton = QPushButton('Stop', self)
        csvButton = QPushButton('Generate Report in CSV', self)
        excelButton = QPushButton('Generate Report in Excel', self)
        startButton.setToolTip('Start Eye Blink Tracking')
        stopButton.setToolTip('Stop the Service')
        csvButton.setToolTip('Generate Report as a CSV file')
        csvButton.adjustSize()
        excelButton.setToolTip('Generate Report as an Excel file')
        excelButton.adjustSize()
        startButton.move(100, 70)
        stopButton.move(100, 150)
        csvButton.move(270, 70)
        excelButton.move(270, 150)

        self.statusBar().showMessage('Ready...')
        startButton.clicked.connect(self.start_service)
        stopButton.clicked.connect(self.stop_service)
        self.show()
Example #22
0
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        # название окна
        self.setWindowTitle('Наша первая программа')
        # задаем ширину окна
        self.setGeometry(100, 500, 500, 200)
        # создание надписи
        self.label = QLabel('Крути барабан!', self)
        # передвигаем нашу надпись на 200 пикселей по x и 100 по y
        self.label.move(185, 100)

        # создание кнопки
        self.btn = QPushButton('крутить', self)
        self.btn.clicked.connect(self.text_shuffle)
        self.btn.move(180, 150)

    def text_shuffle(self, text):
        numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        if choice(numbers) == 10:
            self.btn.setText('Вы выиграли ааавтомобиль')
            self.btn.adjustSize()
        else:
            self.btn.setText('вы проиграли')
Example #23
0
    def initUI(self):

        #Параметры первой кнопки
        btn1 = QPushButton(
            'Скачать anychart-bundlle.min.js с cdn.anychart.com', self)
        btn1.move(10, 30)
        btn1.adjustSize()

        #Параметры второй кнопки
        btn2 = QPushButton('Генерируем HTML файл', self)
        btn2.move(10, 70)
        btn2.adjustSize()

        #Параметры третей кнопки
        btn3 = QPushButton('Используя PhantomJS генерируем screenshot', self)
        btn3.move(10, 110)
        btn3.adjustSize()

        #Параметры четвертой кнопки
        btn4 = QPushButton('Показать screenshot', self)
        btn4.move(10, 150)
        btn4.adjustSize()

        #Сигналы четырех кнопок
        btn1.clicked.connect(self.btnjs)
        btn2.clicked.connect(self.btnhtm)
        btn3.clicked.connect(self.bthjpeg)
        btn4.clicked.connect(self.btnshow)

        menuUI = self.menuBar()
        menuUI.addMenu('Menu')
        menuUI.addMenu('Help')
        menuUI.addMenu('About')

        #Параметры основного окна
        self.statusBar()
        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('anychart.com')
        self.setWindowIcon(QIcon('web.png'))
        self.menuBar()
        self.show()
 def home(self):
     btn_0 = QPushButton("Process data", self)
     btn_0.clicked.connect(self.processed_data)
     btn_0.resize(100,100)
     btn_0.move(0,450)
     btn_0.adjustSize()
     self.label_0 = QLabel(self)
     self.label_0.setText("please process the data")
     self.label_0.move(0,500)
     self.label_0.adjustSize()
     btn_1 = QPushButton("KNN method", self)
     btn_1.clicked.connect(self.knnmethod)
     btn_1.resize(100,100)
     btn_1.move(250,350)
     btn_1.adjustSize()
     self.label_1 = QLabel(self)
     self.label_1.setText("")
     self.label_1.move(250,400)
     self.label_1.adjustSize()
     btn_2 = QPushButton("Bayes", self)
     btn_2.clicked.connect(self.bayes)
     btn_2.resize(100,100)
     btn_2.move(500,200)
     btn_2.adjustSize()
     self.label_2 = QLabel(self)
     self.label_2.setText("")
     self.label_2.move(500,250)
     self.label_2.adjustSize()
     btn_3 = QPushButton("Decision_tree", self)
     btn_3.clicked.connect(self.decision_tree)
     btn_3.resize(100,100)
     btn_3.move(60,200)
     btn_3.adjustSize()
     self.label_3 = QLabel(self)
     self.label_3.setText("")
     self.label_3.move(60,250)
     self.label_3.adjustSize()
     self.show()
Example #25
0
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'F To C'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        c = 1
        data = 100
        p = "ºC"

        self.lable = QLabel()
        self.lable.move(30, 30)
        self.lable.setText(str(data) + str(p))

        self.convert = QPushButton("Change to ºF", self)
        self.convert.adjustSize()
        self.convert.move(2.5, 450)

        if c % 2 == 0:
            self.convert.clicked.connect(self.onclick(False, data, c))
            p = "ºF"
        else:
            self.convert.clicked.connect(self.onclick(True, data, c))
            p = "ºF"

        self.show()

    @pyqtSlot()
    def onclick(self, u, data, c):
        if u == True:
            data = (data - 32) * 5 / 9
            self.convert.setText("Change to ºC")
            self.convert.adjustSize()
        else:
            data = (data * 9 / 5) + 32
            self.convert.setText("Change to ºF")
            self.convert.adjustSize()
        c = c + 1
Example #26
0
    def populate_table(self, data):
        for (id, table_number, food_list, total_price, paid) in data:
            self.table.insertRow(self.table.rowCount())

            self.table.setItem(self.table.rowCount() - 1, 0,
                               QTableWidgetItem(str(table_number)))
            self.table.setItem(self.table.rowCount() - 1, 1,
                               QTableWidgetItem(str(food_list)))
            self.table.setItem(self.table.rowCount() - 1, 2,
                               QTableWidgetItem(str(total_price)))
            self.table.setItem(self.table.rowCount() - 1, 3,
                               QTableWidgetItem(str(paid)))

            edit = QPushButton(self.table)
            edit.setStyleSheet("background-color: rgb(50,205,50);")
            edit.setText("Edit")
            edit.adjustSize()
            edit.clicked.connect(self.edit_bill)

            self.table.setCellWidget(self.table.rowCount() - 1, 4, edit)

            delete = QPushButton(self.table)
            delete.setObjectName(str(id))
            delete.setStyleSheet("background-color: #d63447;")
            delete.setText("Delete")
            delete.adjustSize()
            delete.clicked.connect(self.delete_bill)
            # delete.mousePressEvent = functools.partial(self.delete_emp, source_object=delete)
            self.table.setCellWidget(self.table.rowCount() - 1, 5, delete)

            paid = QPushButton(self.table)
            paid.setObjectName(str(id))
            paid.setStyleSheet("background-color: grey;")
            paid.setText("Paid")
            paid.adjustSize()
            paid.clicked.connect(self.paid_bill)
            # paid.mousePressEvent = functools.partial(self.paid_emp, source_object=paid)
            self.table.setCellWidget(self.table.rowCount() - 1, 6, paid)
Example #27
0
    def __init__(self, parent):
        super().__init__(parent)
        self.setAcceptDrops(True)
        self.parent_widget = parent
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding)
        self._widget_layout = QHBoxLayout(self)

        # widget stuff
        self._d_widget = QWidget(self)
        self._d_widget.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding)
        self._widget_layout.addWidget(self._d_widget)
        self.main_layout = QVBoxLayout(self._d_widget)
        self.main_layout.setSpacing(0)
        self.main_layout.setContentsMargins(0,0,0,0)
        self.arrow_handle = misc.ArrowHandle(self)
        self.arrow_handle.CLICKED.connect(self.slide)

        self._widget_layout.addWidget(self.arrow_handle)
        self.setContentsMargins(0,0,-self.arrow_handle.width(),0)

        self.show_all_galleries_btn = QPushButton("Show all galleries")
        self.show_all_galleries_btn.clicked.connect(lambda:parent.manga_list_view.sort_model.set_gallery_list())
        self.show_all_galleries_btn.clicked.connect(self.show_all_galleries_btn.hide)
        self.show_all_galleries_btn.setIcon(app_constants.CROSS_ICON_WH)
        self.show_all_galleries_btn.hide()
        self.main_layout.addWidget(self.show_all_galleries_btn)
        self.main_buttons_layout = QHBoxLayout()
        self.main_layout.addLayout(self.main_buttons_layout)

        # buttons
        bgroup = QButtonGroup(self)
        bgroup.setExclusive(True)
        self.lists_btn = QPushButton("")
        self.lists_btn.setIcon(app_constants.G_LISTS_ICON_WH)
        self.lists_btn.setCheckable(True)
        bgroup.addButton(self.lists_btn)
        self.artist_btn = QPushButton("")
        self.artist_btn.setIcon(app_constants.ARTISTS_ICON)
        self.artist_btn.setCheckable(True)
        bgroup.addButton(self.artist_btn)
        self.ns_tags_btn = QPushButton("")
        self.ns_tags_btn.setIcon(app_constants.NSTAGS_ICON)
        self.ns_tags_btn.setCheckable(True)
        bgroup.addButton(self.ns_tags_btn)
        self.lists_btn.setChecked(True)


        self.main_buttons_layout.addWidget(self.lists_btn)
        self.main_buttons_layout.addWidget(self.artist_btn)
        self.main_buttons_layout.addWidget(self.ns_tags_btn)

        # buttons contents
        self.stacked_layout = QStackedLayout()
        self.main_layout.addLayout(self.stacked_layout)

        # lists
        gallery_lists_dummy = QWidget(self)
        self.lists = GalleryLists(self)
        create_new_list_btn = QPushButton()
        create_new_list_btn.setIcon(QIcon(app_constants.PLUS_ICON))
        create_new_list_btn.setIconSize(QSize(15, 15))
        create_new_list_btn.clicked.connect(lambda: self.lists.create_new_list())
        create_new_list_btn.adjustSize()
        create_new_list_btn.setFixedSize(create_new_list_btn.width(), create_new_list_btn.height())
        create_new_list_btn.setToolTip("Create a new list!")
        lists_l = QVBoxLayout(gallery_lists_dummy)
        lists_l.setContentsMargins(0,0,0,0)
        lists_l.setSpacing(0)
        lists_l.addWidget(self.lists)
        lists_l.addWidget(create_new_list_btn)
        lists_index = self.stacked_layout.addWidget(gallery_lists_dummy)
        self.lists.GALLERY_LIST_CLICKED.connect(parent.manga_list_view.sort_model.set_gallery_list)
        self.lists.GALLERY_LIST_CLICKED.connect(self.show_all_galleries_btn.show)
        self.lists.GALLERY_LIST_REMOVED.connect(self.show_all_galleries_btn.click)
        self.lists_btn.clicked.connect(lambda:self.stacked_layout.setCurrentIndex(lists_index))
        self.show_all_galleries_btn.clicked.connect(self.lists.clearSelection)
        self.show_all_galleries_btn.clicked.connect(self.lists._reset_selected)

        # artists
        self.artists_list = GalleryArtistsList(parent.manga_list_view.gallery_model, self)
        self.artists_list.artist_clicked.connect(lambda a: parent.search('artist:"{}"'.format(a)))
        artists_list_index = self.stacked_layout.addWidget(self.artists_list)
        self.artist_btn.clicked.connect(lambda:self.stacked_layout.setCurrentIndex(artists_list_index))
        #self.lists.GALLERY_LIST_CLICKED.connect(self.artists_list.set_current_glist)
        self.show_all_galleries_btn.clicked.connect(self.artists_list.clearSelection)
        #self.show_all_galleries_btn.clicked.connect(lambda:self.artists_list.set_current_glist())

        # ns_tags
        self.tags_tree = TagsTreeView(self)
        self.tags_tree.TAG_SEARCH.connect(parent.search)
        self.tags_tree.NEW_LIST.connect(self.lists.create_new_list)
        self.tags_tree.setHeaderHidden(True)
        self.show_all_galleries_btn.clicked.connect(self.tags_tree.clearSelection)
        self.tags_layout = QVBoxLayout(self.tags_tree)
        ns_tags_index = self.stacked_layout.addWidget(self.tags_tree)
        self.ns_tags_btn.clicked.connect(lambda:self.stacked_layout.setCurrentIndex(ns_tags_index))

        self.slide_animation = misc.create_animation(self, "maximumSize")
        self.slide_animation.stateChanged.connect(self._slide_hide)
        self.slide_animation.setEasingCurve(QEasingCurve.InOutQuad)
Example #28
0
	def init_right_panel(self):

		#def title_def(title):
		#	title_lbl = QLabel(title)
		#	f = QFont()
		#	f.setPixelSize(16)
		#	title_lbl.setFont(f)
		#	return title_lbl

		def groupbox(name, layout, parent, add_in_layout=None):
			"""
			Makes a groupbox and a layout for you
			Returns groupbox and layout
			"""
			g = QGroupBox(name, parent)
			l = layout(g)
			if add_in_layout:
				if isinstance(add_in_layout, QFormLayout):
					add_in_layout.addRow(g)
				else:
					add_in_layout.addWidget(g)
			return g, l

		def option_lbl_checkbox(text, optiontext, parent=None):
			l = QLabel(text)
			c = QCheckBox(text, parent)
			return l, c

		def new_tab(name, parent, scroll=False):
			"""
			Creates a new tab.
			Returns new tab page widget and it's layout
			"""
			new_t = QWidget(parent)
			new_l = QFormLayout(new_t)
			if scroll:
				scr = QScrollArea(parent)
				scr.setBackgroundRole(QPalette.Base)
				scr.setWidget(new_t)
				scr.setWidgetResizable(True)
				parent.addTab(scr, name)
				return new_t, new_l
			else:
				parent.addTab(new_t, name)
			return new_t, new_l


		# App
		application = QTabWidget(self)
		self.application_index = self.right_panel.addWidget(application)
		application_general, app_general_m_l = new_tab('General', application, True)

		# App / General / gallery
		app_gallery_page, app_gallery_l = new_tab('Gallery', application, True)
		self.subfolder_as_chapters = QCheckBox("Subdirectiories should be treated as standalone galleries instead of chapters (applies in archives too)")
		self.subfolder_as_chapters.setToolTip("This option will enable creating standalone galleries for each subdirectiories found recursively when importing."+
										"\nDefault action is treating each subfolder found as chapters of a gallery.")
		extract_gallery_info = QLabel("Note: This option has no effect when turned off if path to viewer is not specified.")
		self.extract_gallery_before_opening = QCheckBox("Extract archive before opening (only turn off if your viewer supports it)")
		self.open_galleries_sequentially = QCheckBox("Open chapters sequentially (Note: has no effect if path to viewer is not specified)")
		subf_info = QLabel("Behaviour of 'Scan for new galleries on startup' option will be affected.")
		subf_info.setWordWrap(True)
		app_gallery_l.addRow('Note:', subf_info)
		app_gallery_l.addRow(self.subfolder_as_chapters)
		app_gallery_l.addRow(extract_gallery_info)
		app_gallery_l.addRow(self.extract_gallery_before_opening)
		app_gallery_l.addRow(self.open_galleries_sequentially)
		self.scroll_to_new_gallery = QCheckBox("Scroll to newly added gallery")
		self.scroll_to_new_gallery.setDisabled(True)
		app_gallery_l.addRow(self.scroll_to_new_gallery)
		self.move_imported_gs, move_imported_gs_l = groupbox('Move imported galleries',
													   QFormLayout, app_gallery_page)
		self.move_imported_gs.setCheckable(True)
		self.move_imported_gs.setToolTip("Move imported galleries to specified folder.")
		self.move_imported_def_path = PathLineEdit()
		move_imported_gs_l.addRow('Directory:', self.move_imported_def_path)
		app_gallery_l.addRow(self.move_imported_gs)
		self.rename_g_source_group, rename_g_source_l = groupbox('Rename gallery source',
													  QFormLayout, app_gallery_page)
		self.rename_g_source_group.setCheckable(True)
		self.rename_g_source_group.setDisabled(True)
		app_gallery_l.addRow(self.rename_g_source_group)
		rename_g_source_l.addRow(QLabel("Check what to include when renaming gallery source. (Same order)"))
		rename_g_source_flow_l = FlowLayout()
		rename_g_source_l.addRow(rename_g_source_flow_l)
		self.rename_artist = QCheckBox("Artist")
		self.rename_title = QCheckBox("Title")
		self.rename_lang = QCheckBox("Language")
		self.rename_title.setChecked(True)
		self.rename_title.setDisabled(True)
		rename_g_source_flow_l.addWidget(self.rename_artist)
		rename_g_source_flow_l.addWidget(self.rename_title)
		rename_g_source_flow_l.addWidget(self.rename_lang)
		random_gallery_opener, random_g_opener_l = groupbox('Random Gallery Opener', QFormLayout, app_gallery_page)
		app_gallery_l.addRow(random_gallery_opener)
		self.open_random_g_chapters = QCheckBox("Open random gallery chapters")
		random_g_opener_l.addRow(self.open_random_g_chapters)

		# App / General / Search
		app_search, app_search_layout = groupbox('Search', QFormLayout, application_general)
		app_general_m_l.addRow(app_search)
		search_allow_regex_l = QHBoxLayout()
		self.search_allow_regex = QCheckBox()
		self.search_allow_regex.setChecked(app_constants.ALLOW_SEARCH_REGEX)
		self.search_allow_regex.adjustSize()
		self.search_allow_regex.setToolTip('A regex cheatsheet is located at About->Regex Cheatsheet')
		search_allow_regex_l.addWidget(self.search_allow_regex)
		search_allow_regex_l.addWidget(QLabel('A regex cheatsheet is located at About->Regex Cheatsheet'))
		search_allow_regex_l.addWidget(Spacer('h'))
		app_search_layout.addRow('Regex:', search_allow_regex_l)
		# App / General / Search / autocomplete
		self.search_autocomplete = QCheckBox('*')
		self.search_autocomplete.setChecked(app_constants.SEARCH_AUTOCOMPLETE)
		self.search_autocomplete.setToolTip('Turn autocomplete on/off')
		app_search_layout.addRow('Autocomplete', self.search_autocomplete)
		# App / General / Search / search behaviour
		self.search_every_keystroke = QRadioButton('Search on every keystroke *', app_search)
		app_search_layout.addRow(self.search_every_keystroke)
		self.search_on_enter = QRadioButton('Search on return-key *', app_search)
		app_search_layout.addRow(self.search_on_enter)

		# App / General / External Viewer
		app_external_viewer, app_external_viewer_l = groupbox('External Viewer', QFormLayout, application_general, app_general_m_l)
		app_external_viewer_l.addRow(QLabel("Most image viewers should work. Incase it doesn't," +
									   " hit me up on email/github/gitter-chat to add support."))
		self.external_viewer_path = PathLineEdit(app_external_viewer, False, '')
		self.external_viewer_path.setPlaceholderText('Right/Left-click to open folder explorer.'+
							  ' Leave empty to use default viewer')
		self.external_viewer_path.setToolTip('Right/Left-click to open folder explorer.'+
							  ' Leave empty to use default viewer')
		self.external_viewer_path.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
		app_external_viewer_l.addRow('Path:', self.external_viewer_path)

		# App / General / Rar Support
		app_rar_group, app_rar_layout = groupbox('RAR Support *', QFormLayout, self)
		app_general_m_l.addRow(app_rar_group)
		rar_info = QLabel('Specify the path to the unrar tool to enable rar support.\n'+
					'Windows: "unrar.exe" should be in the "bin" directory if you installed from the'+
					' self-extracting archive provided on github.\nOSX: You can install this via HomeBrew.'+
					' Path should be something like: "/usr/local/bin/unrar".\nLinux: Should already be'+
					' installed. You can just type "unrar". If it\'s not installed, use your package manager: pacman -S unrar')
		rar_info.setWordWrap(True)
		app_rar_layout.addRow(rar_info)
		self.path_to_unrar = PathLineEdit(self, False, filters='')
		app_rar_layout.addRow('UnRAR tool path:', self.path_to_unrar)

		# App / Monitor
		app_monitor_page = QScrollArea()
		app_monitor_page.setBackgroundRole(QPalette.Base)
		app_monitor_dummy = QWidget()
		app_monitor_page.setWidgetResizable(True)
		app_monitor_page.setWidget(app_monitor_dummy)
		application.addTab(app_monitor_page, 'Monitoring')
		app_monitor_m_l = QVBoxLayout(app_monitor_dummy)
		# App / Monitor / misc
		app_monitor_misc_group = QGroupBox('General *', self)
		app_monitor_m_l.addWidget(app_monitor_misc_group)
		app_monitor_misc_m_l = QFormLayout(app_monitor_misc_group)
		monitor_info = QLabel('Directory monitoring will monitor the specified directories for any'+
						' filesystem events. For example if you delete a gallery source in one of your'+
						' monitored directories the application will inform you and ask if'+
						' you want to delete the gallery from the application as well.')
		monitor_info.setWordWrap(True)
		app_monitor_misc_m_l.addRow(monitor_info)
		self.enable_monitor = QCheckBox('Enable directory monitoring')
		app_monitor_misc_m_l.addRow(self.enable_monitor)
		self.look_new_gallery_startup = QGroupBox('Scan for new galleries on startup', self)
		app_monitor_misc_m_l.addRow(self.look_new_gallery_startup)
		self.look_new_gallery_startup.setCheckable(True)
		look_new_gallery_startup_m_l = QVBoxLayout(self.look_new_gallery_startup)
		self.auto_add_new_galleries = QCheckBox('Automatically add found galleries')
		look_new_gallery_startup_m_l.addWidget(self.auto_add_new_galleries)

		# App / Monitor / folders
		app_monitor_group = QGroupBox('Directories *', self)
		app_monitor_m_l.addWidget(app_monitor_group, 1)
		app_monitor_folders_m_l = QVBoxLayout(app_monitor_group)
		app_monitor_folders_add = QPushButton('+')
		app_monitor_folders_add.clicked.connect(self.add_folder_monitor)
		app_monitor_folders_add.setMaximumWidth(20)
		app_monitor_folders_add.setMaximumHeight(20)
		app_monitor_folders_m_l.addWidget(app_monitor_folders_add, 0, Qt.AlignRight)
		self.folders_layout = QFormLayout()
		app_monitor_folders_m_l.addLayout(self.folders_layout)

		# App / Ignore
		app_ignore, app_ignore_m_l = new_tab('Ignore', application, True)
		app_ignore_group, app_ignore_list_l = groupbox('List', QVBoxLayout, app_monitor_dummy)
		app_ignore_m_l.addRow(app_ignore_group)
		add_buttons_l = QHBoxLayout()
		app_ignore_add_a = QPushButton('Add archive')
		app_ignore_add_a.clicked.connect(lambda: self.add_ignore_path(dir=False))
		app_ignore_add_f = QPushButton('Add directory')
		app_ignore_add_f.clicked.connect(self.add_ignore_path)
		add_buttons_l.addWidget(app_ignore_add_a, 0, Qt.AlignRight)
		add_buttons_l.addWidget(app_ignore_add_f, 1, Qt.AlignRight)
		app_ignore_list_l.addLayout(add_buttons_l)
		self.ignore_path_l = QFormLayout()
		app_ignore_list_l.addLayout(self.ignore_path_l)

		# Web
		web = QTabWidget(self)
		self.web_index = self.right_panel.addWidget(web)

		# Web / Downloader
		web_downloader, web_downloader_l = new_tab('Downloader', web)
		hen_download_group, hen_download_group_l = groupbox('g.e-hentai/exhentai',
													  QFormLayout, web_downloader)
		web_downloader_l.addRow(hen_download_group)
		self.archive_download = QRadioButton('Archive', hen_download_group)
		self.torrent_download = QRadioButton('Torrent', hen_download_group)
		download_type_l = QHBoxLayout()
		download_type_l.addWidget(self.archive_download)
		download_type_l.addWidget(self.torrent_download, 1)
		hen_download_group_l.addRow('Download Type:', download_type_l)
		self.download_directory = PathLineEdit(web_downloader)
		web_downloader_l.addRow('Destination:', self.download_directory)
		self.torrent_client = PathLineEdit(web_downloader, False, '')
		web_downloader_l.addRow(QLabel("Leave empty to use default torrent client."+
								 "\nIt is NOT recommended to import a file while it's still downloading."))
		web_downloader_l.addRow('Torrent client:', self.torrent_client)

		# Web / Metadata
		web_metadata_page = QScrollArea()
		web_metadata_page.setBackgroundRole(QPalette.Base)
		web_metadata_page.setWidgetResizable(True)
		web.addTab(web_metadata_page, 'Metadata')
		web_metadata_dummy = QWidget()
		web_metadata_page.setWidget(web_metadata_dummy)
		web_metadata_m_l = QFormLayout(web_metadata_dummy)
		self.default_ehen_url = QRadioButton('g.e-hentai.org', web_metadata_page)
		self.exhentai_ehen_url = QRadioButton('exhentai.org', web_metadata_page)
		ehen_url_l = QHBoxLayout()
		ehen_url_l.addWidget(self.default_ehen_url)
		ehen_url_l.addWidget(self.exhentai_ehen_url, 1)
		web_metadata_m_l.addRow('Default URL:', ehen_url_l)
		self.continue_a_metadata_fetcher = QCheckBox('Continue from where auto metadata fetcher left off')
		web_metadata_m_l.addRow(self.continue_a_metadata_fetcher)
		self.use_jpn_title = QCheckBox('Use japanese title')
		self.use_jpn_title.setToolTip('Choose the japenese title over the english one')
		web_metadata_m_l.addRow(self.use_jpn_title)
		time_offset_info = QLabel('We need to impose a delay between our requests to avoid getting banned.'+
							' I have made it so you cannot set the delay lower than the recommended (I don\'t'+
							' want you to get banned, anon!).\nSpecify the delay between requests in seconds.')
		time_offset_info.setWordWrap(True)
		self.web_time_offset = QSpinBox()
		self.web_time_offset.setMaximumWidth(40)
		self.web_time_offset.setMinimum(4)
		self.web_time_offset.setMaximum(99)
		web_metadata_m_l.addRow(time_offset_info)
		web_metadata_m_l.addRow('Requests delay in seconds', self.web_time_offset)
		replace_metadata_info = QLabel('When fetching for metadata the new metadata will be appended'+
								 ' to the gallery by default. This means that new data will only be added if'+
								 ' the field was empty. There is however a special case for namespace & tags.'+
								 ' We go through all the new namespace & tags to only add those that'+
								 ' do not already exists.\n\nEnabling this option makes it so that a gallery\'s old data'+
								 ' are deleted and replaced with the new data.')
		replace_metadata_info.setWordWrap(True)
		self.replace_metadata = QCheckBox('Replace old metadata with new metadata')
		web_metadata_m_l.addRow(replace_metadata_info)
		web_metadata_m_l.addRow(self.replace_metadata)
		first_hit_info = QLabel('By default, you get to choose which gallery to extract metadata from when'+
						  ' there is more than one gallery found when searching.\n'+
						  'Enabling this option makes it choose the first hit, saving you from moving your mouse.')
		first_hit_info.setWordWrap(True)
		self.always_first_hit = QCheckBox('Always choose first hit')
		web_metadata_m_l.addRow(first_hit_info)
		web_metadata_m_l.addRow(self.always_first_hit)
		self.use_gallery_link = QCheckBox('Use current gallery link')
		self.use_gallery_link.setToolTip("Metadata will be fetched from the current gallery link"+
								   " if it's a valid ex/g.e gallery url")
		web_metadata_m_l.addRow(self.use_gallery_link)

		# Web / Exhentai
		exhentai_page = QWidget(self)
		web.addTab(exhentai_page, 'ExHentai')
		ipb_layout = QFormLayout()
		exhentai_page.setLayout(ipb_layout)
		self.ipbid_edit = QLineEdit()
		self.ipbpass_edit = QLineEdit()
		exh_tutorial = QLabel(app_constants.EXHEN_COOKIE_TUTORIAL)
		exh_tutorial.setTextFormat(Qt.RichText)
		ipb_layout.addRow('IPB Member ID:', self.ipbid_edit)
		ipb_layout.addRow('IPB Pass Hash:', self.ipbpass_edit)
		ipb_layout.addRow(exh_tutorial)

		# Visual
		visual = QTabWidget(self)
		self.visual_index = self.right_panel.addWidget(visual)
		visual_general_page = QWidget()
		visual.addTab(visual_general_page, 'General')

		grid_view_general_page = QWidget()
		visual.addTab(grid_view_general_page, 'Grid View')
		grid_view_layout = QVBoxLayout()
		grid_view_layout.addWidget(QLabel('Options marked with * requires application restart'),
						   0, Qt.AlignTop)
		grid_view_general_page.setLayout(grid_view_layout)
		# grid view
		# grid view / tooltip
		self.grid_tooltip_group = QGroupBox('Tooltip', grid_view_general_page)
		self.grid_tooltip_group.setCheckable(True)
		grid_view_layout.addWidget(self.grid_tooltip_group, 0, Qt.AlignTop)
		grid_tooltip_layout = QFormLayout()
		self.grid_tooltip_group.setLayout(grid_tooltip_layout)
		grid_tooltip_layout.addRow(QLabel('Control what is'+
									' displayed in the tooltip when hovering a gallery'))
		grid_tooltips_hlayout = FlowLayout()
		grid_tooltip_layout.addRow(grid_tooltips_hlayout)
		self.visual_grid_tooltip_title = QCheckBox('Title')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_title)
		self.visual_grid_tooltip_author = QCheckBox('Author')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_author)
		self.visual_grid_tooltip_chapters = QCheckBox('Chapters')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_chapters)
		self.visual_grid_tooltip_status = QCheckBox('Status')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_status)
		self.visual_grid_tooltip_type = QCheckBox('Type')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_type)
		self.visual_grid_tooltip_lang = QCheckBox('Language')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_lang)
		self.visual_grid_tooltip_descr = QCheckBox('Description')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_descr)
		self.visual_grid_tooltip_tags = QCheckBox('Tags')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_tags)
		self.visual_grid_tooltip_last_read = QCheckBox('Last read')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_last_read)
		self.visual_grid_tooltip_times_read = QCheckBox('Times read')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_times_read)
		self.visual_grid_tooltip_pub_date = QCheckBox('Publication Date')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_pub_date)
		self.visual_grid_tooltip_date_added = QCheckBox('Date added')
		grid_tooltips_hlayout.addWidget(self.visual_grid_tooltip_date_added)
		# grid view / gallery
		grid_gallery_group = QGroupBox('Gallery', grid_view_general_page)
		grid_view_layout.addWidget(grid_gallery_group, 0, Qt.AlignTop)
		grid_gallery_main_l = QFormLayout()
		grid_gallery_main_l.setFormAlignment(Qt.AlignLeft)
		grid_gallery_group.setLayout(grid_gallery_main_l)
		grid_gallery_display = FlowLayout()
		grid_gallery_main_l.addRow('Display icon on gallery:', grid_gallery_display)
		self.external_viewer_ico = QCheckBox('External Viewer')
		grid_gallery_display.addWidget(self.external_viewer_ico)
		self.gallery_type_ico = QCheckBox('File Type')
		grid_gallery_display.addWidget(self.gallery_type_ico)
		if sys.platform.startswith('darwin'):
			grid_gallery_group.setEnabled(False)
		gallery_text_mode = QWidget()
		grid_gallery_main_l.addRow('Text Mode:', gallery_text_mode)
		gallery_text_mode_l = QHBoxLayout()
		gallery_text_mode.setLayout(gallery_text_mode_l)
		self.gallery_text_elide = QRadioButton('Elide text', gallery_text_mode)
		self.gallery_text_fit = QRadioButton('Fit text', gallery_text_mode)
		gallery_text_mode_l.addWidget(self.gallery_text_elide, 0, Qt.AlignLeft)
		gallery_text_mode_l.addWidget(self.gallery_text_fit, 0, Qt.AlignLeft)
		gallery_text_mode_l.addWidget(Spacer('h'), 1, Qt.AlignLeft)
		gallery_font = QHBoxLayout()
		grid_gallery_main_l.addRow('Font:*', gallery_font)
		self.font_lbl = QLabel()
		self.font_size_lbl = QSpinBox()
		self.font_size_lbl.setMaximum(100)
		self.font_size_lbl.setMinimum(1)
		self.font_size_lbl.setToolTip('Font size in pixels')
		choose_font = QPushButton('Choose font')
		choose_font.clicked.connect(self.choose_font)
		gallery_font.addWidget(self.font_lbl, 0, Qt.AlignLeft)
		gallery_font.addWidget(self.font_size_lbl, 0, Qt.AlignLeft)
		gallery_font.addWidget(choose_font, 0, Qt.AlignLeft)
		gallery_font.addWidget(Spacer('h'), 1, Qt.AlignLeft)
		# grid view / colors
		grid_colors_group = QGroupBox('Colors', grid_view_general_page)
		grid_view_layout.addWidget(grid_colors_group, 1, Qt.AlignTop)
		grid_colors_l = QFormLayout()
		grid_colors_group.setLayout(grid_colors_l)
		def color_lineedit():
			l = QLineEdit()
			l.setPlaceholderText('Hex colors. Eg.: #323232')
			l.setMaximumWidth(200)
			return l
		self.grid_label_color = color_lineedit()
		self.grid_title_color = color_lineedit()
		self.grid_artist_color = color_lineedit()
		grid_colors_l.addRow('Label color:', self.grid_label_color)
		grid_colors_l.addRow('Title color:', self.grid_title_color)
		grid_colors_l.addRow('Artist color:', self.grid_artist_color)

		style_page = QWidget(self)
		visual.addTab(style_page, 'Style')
		visual.setTabEnabled(0, False)
		visual.setTabEnabled(2, False)
		visual.setCurrentIndex(1)

		# Advanced
		advanced = QTabWidget(self)
		self.advanced_index = self.right_panel.addWidget(advanced)
		advanced_misc_scroll = QScrollArea(self)
		advanced_misc_scroll.setBackgroundRole(QPalette.Base)
		advanced_misc_scroll.setWidgetResizable(True)
		advanced_misc = QWidget()
		advanced_misc_scroll.setWidget(advanced_misc)
		advanced.addTab(advanced_misc_scroll, 'Misc')
		advanced_misc_main_layout = QVBoxLayout()
		advanced_misc.setLayout(advanced_misc_main_layout)
		misc_controls_layout = QFormLayout()
		advanced_misc_main_layout.addLayout(misc_controls_layout)
		# Advanced / Misc / Grid View
		misc_gridview = QGroupBox('Grid View')
		misc_controls_layout.addWidget(misc_gridview)
		misc_gridview_layout = QFormLayout()
		misc_gridview.setLayout(misc_gridview_layout)
		# Advanced / Misc / Grid View / scroll speed
		scroll_speed_spin_box = QSpinBox()
		scroll_speed_spin_box.setFixedWidth(60)
		scroll_speed_spin_box.setToolTip('Control the speed when scrolling in'+
								   ' grid view. DEFAULT: 7')
		scroll_speed_spin_box.setValue(self.scroll_speed)
		def scroll_speed(v): self.scroll_speed = v
		scroll_speed_spin_box.valueChanged[int].connect(scroll_speed)
		misc_gridview_layout.addRow('Scroll speed:', scroll_speed_spin_box)
		# Advanced / Misc / Grid View / cache size
		cache_size_spin_box = QSpinBox()
		cache_size_spin_box.setFixedWidth(120)
		cache_size_spin_box.setMaximum(999999999)
		cache_size_spin_box.setToolTip('This can greatly reduce lags/freezes in the grid view.' +
								 ' Increase the value if you experience lag when scrolling'+
								 ' through galleries. DEFAULT: 200 MiB')
		def cache_size(c): self.cache_size = (self.cache_size[0], c)
		cache_size_spin_box.setValue(self.cache_size[1])
		cache_size_spin_box.valueChanged[int].connect(cache_size)
		misc_gridview_layout.addRow('Cache Size (MiB):', cache_size_spin_box)

		# Advanced / Gallery
		advanced_gallery, advanced_gallery_m_l = new_tab('Gallery', advanced)
		def rebuild_thumbs():
			confirm_msg = QMessageBox(QMessageBox.Question, '', 'Are you sure you want to regenerate your thumbnails.',
							 QMessageBox.Yes | QMessageBox.No, self)
			if confirm_msg.exec() == QMessageBox.Yes:
				clear_cache_confirm = QMessageBox(QMessageBox.Question, '',
									  'Do you want to delete all old thumbnails before regenerating?', QMessageBox.Yes | QMessageBox.No,
									  self)
				clear_cache = False
				if clear_cache_confirm.exec() == QMessageBox.Yes:
					clear_cache = True
				gallerydb.DatabaseEmitter.RUN = False
				def start_db_activity(): gallerydb.DatabaseEmitter.RUN = True
				app_popup = ApplicationPopup(self.parent_widget)
				app_popup.info_lbl.setText("Regenerating thumbnails...")
				app_popup.admin_db = gallerydb.AdminDB()
				app_popup.admin_db.moveToThread(app_constants.GENERAL_THREAD)
				app_popup.admin_db.DONE.connect(app_popup.admin_db.deleteLater)
				app_popup.admin_db.DONE.connect(start_db_activity)
				app_popup.admin_db.DATA_COUNT.connect(app_popup.prog.setMaximum)
				app_popup.admin_db.PROGRESS.connect(app_popup.prog.setValue)
				self.init_gallery_rebuild.connect(app_popup.admin_db.rebuild_thumbs)
				app_popup.adjustSize()
				self.init_gallery_rebuild.emit(clear_cache)
				app_popup.show()

		rebuild_thumbs_info = QLabel("Clears thumbnail cache and rebuilds it, which can take a while. Tip: Useful when changing thumbnail size.")
		rebuild_thumbs_btn = QPushButton('Regenerate Thumbnails')
		rebuild_thumbs_btn.adjustSize()
		rebuild_thumbs_btn.setFixedWidth(rebuild_thumbs_btn.width())
		rebuild_thumbs_btn.clicked.connect(rebuild_thumbs)
		advanced_gallery_m_l.addRow(rebuild_thumbs_info)
		advanced_gallery_m_l.addRow(rebuild_thumbs_btn)
		g_data_fixer_group, g_data_fixer_l =  groupbox('Gallery Renamer', QFormLayout, advanced_gallery)
		g_data_fixer_group.setEnabled(False)
		advanced_gallery_m_l.addRow(g_data_fixer_group)
		g_data_regex_fix_lbl = QLabel("Rename a gallery through regular expression."+
								" A regex cheatsheet is located at About -> Regex Cheatsheet.")
		g_data_regex_fix_lbl.setWordWrap(True)
		g_data_fixer_l.addRow(g_data_regex_fix_lbl)
		self.g_data_regex_fix_edit = QLineEdit()
		self.g_data_regex_fix_edit.setPlaceholderText("Valid regex")
		g_data_fixer_l.addRow('Regex:', self.g_data_regex_fix_edit)
		self.g_data_replace_fix_edit = QLineEdit()
		self.g_data_replace_fix_edit.setPlaceholderText("Leave empty to delete matches")
		g_data_fixer_l.addRow('Replace with:', self.g_data_replace_fix_edit)
		g_data_fixer_options = FlowLayout()
		g_data_fixer_l.addRow(g_data_fixer_options)
		self.g_data_fixer_title = QCheckBox("Title", g_data_fixer_group)
		self.g_data_fixer_artist = QCheckBox("Artist", g_data_fixer_group)
		g_data_fixer_options.addWidget(self.g_data_fixer_title)
		g_data_fixer_options.addWidget(self.g_data_fixer_artist)

		# Advanced / Database
		advanced_db_page, advanced_db_page_l = new_tab('Database', advanced)
		# Advanced / Database / Import/Export
		def init_export():
			confirm_msg = QMessageBox(QMessageBox.Question, '', 'Are you sure you want to export your database? This might take a long time.',
							 QMessageBox.Yes | QMessageBox.No, self)
			if confirm_msg.exec() == QMessageBox.Yes:
				app_popup = ApplicationPopup(self.parent_widget)
				app_popup.info_lbl.setText("Exporting database...")
				app_popup.export_instance = io_misc.ImportExport()
				app_popup.export_instance.moveToThread(app_constants.GENERAL_THREAD)
				app_popup.export_instance.finished.connect(app_popup.export_instance.deleteLater)
				app_popup.export_instance.finished.connect(app_popup.close)
				app_popup.export_instance.amount.connect(app_popup.prog.setMaximum)
				app_popup.export_instance.progress.connect(app_popup.prog.setValue)
				self.init_gallery_eximport.connect(app_popup.export_instance.export_data)
				self.init_gallery_eximport.emit(None)
				app_popup.adjustSize()
				app_popup.show()
				self.close()

		def init_import():
			path = QFileDialog.getOpenFileName(self,
									  'Choose happypanda database file', filter='*.hpdb')
			path = path[0]
			if len(path) != 0:
				app_popup = ApplicationPopup(self.parent_widget)
				app_popup.restart_info.hide()
				app_popup.info_lbl.setText("Importing database file...")
				app_popup.note_info.setText("Application requires a restart after importing")
				app_popup.import_instance = io_misc.ImportExport()
				app_popup.import_instance.moveToThread(app_constants.GENERAL_THREAD)
				app_popup.import_instance.finished.connect(app_popup.import_instance.deleteLater)
				app_popup.import_instance.finished.connect(app_popup.init_restart)
				app_popup.import_instance.amount.connect(app_popup.prog.setMaximum)
				app_popup.import_instance.imported_g.connect(app_popup.info_lbl.setText)
				app_popup.import_instance.progress.connect(app_popup.prog.setValue)
				self.init_gallery_eximport.connect(app_popup.import_instance.import_data)
				self.init_gallery_eximport.emit(path)
				app_popup.adjustSize()
				app_popup.show()
				self.close()

		advanced_impexp, advanced_impexp_l = groupbox('Import/Export', QFormLayout, advanced_db_page)
		advanced_db_page_l.addRow(advanced_impexp)
		self.export_format = QComboBox(advanced_db_page)
		#self.export_format.addItem('Text File', 0)
		self.export_format.addItem('HPDB', 1)
		self.export_format.adjustSize()
		self.export_format.setFixedWidth(self.export_format.width())
		advanced_impexp_l.addRow('Export Format:', self.export_format)
		self.export_path = PathLineEdit(advanced_impexp, filters='')
		advanced_impexp_l.addRow('Export Path:', self.export_path)
		import_btn = QPushButton('Import database')
		import_btn.clicked.connect(init_import)
		export_btn = QPushButton('Export database')
		export_btn.clicked.connect(init_export)
		ex_imp_btn_l = QHBoxLayout()
		ex_imp_btn_l.addWidget(import_btn)
		ex_imp_btn_l.addWidget(export_btn)
		advanced_impexp_l.addRow(ex_imp_btn_l)


		# About
		about = QTabWidget(self)
		self.about_index = self.right_panel.addWidget(about)
		about_happypanda_page, about_layout = new_tab("About Happypanda", about, False)
		info_lbl = QLabel(app_constants.ABOUT)
		info_lbl.setWordWrap(True)
		info_lbl.setOpenExternalLinks(True)
		about_layout.addWidget(info_lbl)
		about_layout.addWidget(Spacer('v'))
		open_hp_folder = QPushButton('Open Happypanda Directory')
		open_hp_folder.clicked.connect(self.open_hp_folder)
		open_hp_folder.adjustSize()
		open_hp_folder.setFixedWidth(open_hp_folder.width())
		about_layout.addWidget(open_hp_folder)

		# About / DB Overview
		about_db_overview, about_db_overview_m_l = new_tab('DB Overview', about)
		about_stats_tab_widget = misc_db.DBOverview(self.parent_widget)
		about_db_overview_options = QHBoxLayout()
		self.tags_treeview_on_start = QCheckBox('Start with application', about_db_overview)
		make_window_btn = QPushButton('Open in window', about_db_overview)
		make_window_btn.adjustSize()
		make_window_btn.setFixedWidth(make_window_btn.width())
		about_db_overview_options.addWidget(self.tags_treeview_on_start)
		about_db_overview_options.addWidget(make_window_btn)
		def mk_btn_false():
			try:
				make_window_btn.setDisabled(False)
			except RuntimeError:
				pass
		def make_tags_treeview_window():
			self.parent_widget.tags_treeview = misc_db.DBOverview(self.parent_widget, True)
			self.parent_widget.tags_treeview.about_to_close.connect(mk_btn_false)
			make_window_btn.setDisabled(True)
			self.parent_widget.tags_treeview.show()
		if self.parent_widget.tags_treeview:
			self.parent_widget.tags_treeview.about_to_close.connect(mk_btn_false)
			make_window_btn.setDisabled(True)
		make_window_btn.clicked.connect(make_tags_treeview_window)
		about_db_overview_m_l.addRow(about_db_overview_options)
		about_db_overview_m_l.addRow(about_stats_tab_widget)

		# About / Troubleshooting
		about_troubleshoot_page = QWidget()
		about.addTab(about_troubleshoot_page, 'Bug Reporting')
		troubleshoot_layout = QVBoxLayout()
		about_troubleshoot_page.setLayout(troubleshoot_layout)
		guide_lbl = QLabel(app_constants.TROUBLE_GUIDE)
		guide_lbl.setTextFormat(Qt.RichText)
		guide_lbl.setOpenExternalLinks(True)
		guide_lbl.setWordWrap(True)
		troubleshoot_layout.addWidget(guide_lbl, 0, Qt.AlignTop)
		troubleshoot_layout.addWidget(Spacer('v'))

		# About / Search tutorial
		about_search_tut, about_search_tut_l = new_tab("Search Guide", about, True)
		g_search_lbl = QLabel(app_constants.SEARCH_TUTORIAL_TAGS)
		g_search_lbl.setWordWrap(True)
		about_search_tut_l.addRow(g_search_lbl)

		# About / Regex Cheatsheet
		about_s_regex, about_s_regex_l = new_tab("Regex Cheatsheet", about, True)
		reg_info = QLabel(app_constants.REGEXCHEAT)
		reg_info.setWordWrap(True)
		about_s_regex_l.addRow(reg_info)
Example #29
0
class DiploDialog(QDialog):
    '''
    Diplomatic dialog.
    '''
    def __init__(self, active, player):
        super().__init__()
        self.active = active
        self.player = player
        self.allies = []
        self.enemies = []
        self.gold = 0
        self.setWindowTitle(self.player.name)
        self.addInfo()
        self.addActions()

    def addActions(self):
        '''
        Adds and places the labels and buttons for the diplomatic actions
        possible in the game.
        '''
        actions = QLabel("Actions", self)
        actions.move(0, 80)
        actions.setFont(self.qfont)
        self.ally = QPushButton("Ally", self)
        self.ally.move(0, 100)
        self.ally.adjustSize()
        self.ally.clicked.connect(self.allyClicked)
        self.declareWar = QPushButton("Declare War", self)
        self.declareWar.move(100, 100)
        self.declareWar.adjustSize()
        self.declareWar.clicked.connect(self.warClicked)
        self.peace = QPushButton("Make Peace", self)
        self.peace.move(100, 150)
        self.peace.adjustSize()
        self.peace.clicked.connect(self.peaceClicked)
        self.callToArms = QPushButton("Call to arms", self)
        self.callToArms.move(0, 150)
        self.callToArms.adjustSize()
        self.callToArms.clicked.connect(self.callClicked)
        self.breakAlly = QPushButton("Break Alliance", self)
        self.breakAlly.adjustSize()
        self.breakAlly.move(50, 125)
        self.breakAlly.clicked.connect(self.breakClicked)
        self.updateEnables()

    def addInfo(self):
        '''
        Adds allies and enemies labels.
        '''
        self.qfont = QFont()
        self.qfont.setPointSize(13)
        allies = QLabel("Allies", self)
        allies.setFont(self.qfont)
        enemies = QLabel("Enemies", self)
        enemies.setFont(self.qfont)
        enemies.move(0, 40)
        self.addPlayers(self.player.allies, 20, self.allies)
        self.addPlayers(self.player.enemies, 60, self.allies)

    def addPlayers(self, players, y, labels):
        '''
        Displays labels for every player in players and positions them at
        y coordinate y.
        '''
        x = 0
        for player in players:
            lbl = QLabel(player.name, self)
            lbl.move(x, y)
            lbl.setFont(self.qfont)
            color = player.color
            lbl.setStyleSheet("QWidget { color: %s }" % QColor(*color).name())
            x = x + 100
            labels.append(lbl)

    def updateEnemies(self):
        '''
        Updates enemies labels.
        '''
        x = 0
        for label in self.enemies:
            label.move(x, 60)
            x = x + 100

    def removeLabel(self, labels, name):
        '''
        Remove labels with text name from labels.
        '''
        for label in labels:
            if label.text() == name:
                for_del = label
                for_del.hide()
        if for_del:
            labels.remove(for_del)

    def warClicked(self, event):
        self.active.declare_war(self.player)
        lbl = QLabel(self.active.name, self)
        lbl.setFont(self.qfont)
        color = self.active.color
        lbl.setStyleSheet("QWidget { color: %s }" % QColor(*color).name())
        lbl.show()
        msg = " declared war on you"
        offer = Offer("message", self.player, self.active, 0, msg)
        self.player.offers.append(offer)
        self.enemies.append(lbl)
        self.updateEnemies()
        self.updateEnables()

    def peaceClicked(self, event):
        if self.execInput() == 1:
            offer = Offer("peace", self.player, self.active, self.gold)
            self.player.offers.append(offer)
            self.peace.setEnabled(False)

    def allyClicked(self, event):
        if self.execInput() == 1:
            offer = Offer("alliance", self.player, self.active, self.gold)
            self.player.offers.append(offer)
            self.ally.setEnabled(False)
            self.declareWar.setEnabled(False)

    def breakClicked(self, event):
        self.active.break_ally(self.player)
        self.removeLabel(self.allies, self.active.name)
        msg = " broke the alliance with you"
        offer = Offer("message", self.player, self.active, 0, msg)
        self.player.offers.append(offer)
        self.updateEnables()

    def callClicked(self, event):
        if self.execInput() == 1:
            offer = Offer("call to arms", self.player, self.active, self.gold)
            self.player.offers.append(offer)
            self.callToArms.setEnabled(False)

    def execInput(self):
        '''
        Executes the input dialog for adding gold in the offer.
        '''
        input = QInputDialog()
        input.setWindowTitle("Gold ammount")
        msg = "Enter negative number"
        msg = msg + " to offer and positive number to demand gold"
        input.setLabelText(msg)
        input.setIntRange(-self.active.gold, self.player.gold)
        input.setIntValue(0)
        result = input.exec_()
        self.gold = -input.intValue()
        return result

    def updateEnables(self):
        '''
        Updates the enables of all diplomatic actions
        in the diplomatic window.
        '''
        notActive = self.player is not self.active
        allyEnabled = self.player not in self.active.allies and notActive
        allyEnabled = allyEnabled and self.player not in self.active.enemies
        self.ally.setEnabled(allyEnabled)
        peaceEnabled = self.player in self.active.enemies and notActive
        self.peace.setEnabled(peaceEnabled)
        self.callToArms.setEnabled(self.active.can_call_to_arms(self.player))
        self.declareWar.setEnabled(allyEnabled)
        self.breakAlly.setEnabled(self.active in self.player.allies)
Example #30
0
class ProjetManager(QWidget):

    currentProjetChanged = QSignal(ProjetReader)

    def __init__(self, parent=None, projet=None):
        super(ProjetManager, self).__init__(parent)
        self.new_projet_dialog = NewProject(parent)
        self.new_projet_dialog.sig_new_project.connect(self.load_project)

        self.projet = None
        self.__initGUI__()
        if projet:
            self.load_project(projet)

    def __initGUI__(self):
        self.project_display = QPushButton()
        self.project_display.setFocusPolicy(Qt.NoFocus)
        self.project_display.setMinimumWidth(100)
        self.project_display.clicked.connect(self.select_project)

        ft = QApplication.instance().font()
        ft.setPointSize(ft.pointSize()-1)
        self.project_display.setFont(ft)

        new_btn = QToolButtonSmall(icons.get_icon('new_project'))
        new_btn.setToolTip('Create a new project...')
        new_btn.clicked.connect(self.show_newproject_dialog)

        # ---- layout

        layout = QGridLayout(self)

        layout.addWidget(QLabel('Project :'), 0, 1)
        layout.addWidget(self.project_display, 0, 2)
        layout.addWidget(new_btn, 0, 3)

        layout.setSpacing(3)
        layout.setContentsMargins(0, 0, 0, 5)  # (L, T, R, B)
        layout.setColumnStretch(0, 500)
        layout.setRowMinimumHeight(0, 28)

    def select_project(self):
        directory = os.path.abspath(os.path.join('..', 'Projects'))
        filename, _ = QFileDialog.getOpenFileName(
            self, 'Open Project', directory, '*.gwt ; *.what')

        if filename:
            self.projectfile = filename
            self.load_project(filename)

    def load_project(self, filename):
        """
        Load the project from the specified filename.
        """
        self.close_projet()

        # If the project doesn't exist.
        if not osp.exists(filename):
            msg_box = QMessageBox(
                QMessageBox.Warning,
                "Open project warning",
                ("<b>Failed to open the project.</b><br><br>"
                 "The project file does not exist. Please open an existing "
                 "project or create a new one."
                 "<br><br><i>{}</i>").format(osp.abspath(filename)),
                buttons=QMessageBox.Ok,
                parent=self)
            msg_box.exec_()
            return False

        # If the project fails to load.
        try:
            projet = ProjetReader(filename)
        except Exception:
            if osp.exists(filename + '.bak'):
                msg_box = QMessageBox(
                    QMessageBox.Question,
                    "Open project warning",
                    ("<b>Failed to open the project.</b><br><br>"
                     "The project file may be corrupt. Do you want to "
                     "restore the project from the last project backup?"
                     "<br><br><i>{}</i>").format(osp.abspath(filename)),
                    buttons=QMessageBox.Yes | QMessageBox.Cancel,
                    parent=self)
                reply = msg_box.exec_()
                if reply == QMessageBox.Yes:
                    return self.restore_from_backup(filename)
                else:
                    return False
            else:
                msg_box = QMessageBox(
                    QMessageBox.Warning,
                    "Open project warning",
                    ("<b>Failed to open the project.</b><br><br>"
                     "The project file is not valid. Please open an existing "
                     "valid project or create a new one."
                     "<br><br><i>{}</i>").format(osp.abspath(filename)),
                    buttons=QMessageBox.Ok,
                    parent=self)
                msg_box.exec_()
                return False
        else:
            self.projet = projet

        # If the project is corrupt.
        if self.projet.check_project_file() is True:
            self.projet.backup_project_file()
        else:
            if osp.exists(filename + '.bak'):
                msg_box = QMessageBox(
                    QMessageBox.Question,
                    "Open project warning",
                    ("<b>The project file may be corrupt.</b><br><br>"
                     "Would you like to restore the project from the last "
                     "project backup?<br><br>"
                     "Click <i>Yes</i> to restore the project, click "
                     "<i>Ignore</i> to open the project anyway, "
                     "or click <i>Cancel</i> to not open any project."
                     "<br><br><i>{}</i>").format(osp.abspath(filename)),
                    buttons=(QMessageBox.Yes |
                             QMessageBox.Ignore |
                             QMessageBox.Cancel),
                    parent=self)
                reply = msg_box.exec_()
                if reply == QMessageBox.Yes:
                    return self.restore_from_backup(filename)
                if reply == QMessageBox.Ignore:
                    pass
                else:
                    self.close_projet()
                    return False
            else:
                msg_box = QMessageBox(
                    QMessageBox.Question,
                    "Open project warning",
                    ("<b>The project file appears to be corrupt.</b><br><br>"
                     "Do you want open the project anyway?"
                     "<br><br><i>{}</i>").format(osp.abspath(filename)),
                    buttons=QMessageBox.Yes | QMessageBox.Cancel,
                    parent=self)
                reply = msg_box.exec_()
                if reply == QMessageBox.Yes:
                    pass
                else:
                    self.close_projet()
                    return False

        init_waterlvl_measures(osp.join(self.projet.dirname, "Water Levels"))
        self.project_display.setText(self.projet.name)
        self.project_display.adjustSize()
        self.currentProjetChanged.emit(self.projet)
        return True

    def restore_from_backup(self, filename):
        """
        Try to restore the project from its backup file.
        """
        self.close_projet()
        msg_box = QMessageBox(
            QMessageBox.Warning,
            "Restore project warning",
            ("<b>Failed to restore the project.</b><br><br>"
             "We are very sorry for the inconvenience. "
             "Please submit a bug report on our GitHub issue tracker."),
            buttons=QMessageBox.Ok,
            parent=self)

        # First we check that the backup is ok.
        try:
            backup = ProjetReader(filename + '.bak')
            assert backup.check_project_file() is True
            backup.close()
        except Exception:
            msg_box.exec_()
            return False

        # Then we try to restore the project from the backup.
        print("Restoring project from backup... ", end='')
        try:
            os.remove(filename)
            copyfile(filename + '.bak', filename)
        except (OSError, PermissionError):
            print('failed')
            msg_box.exec_()
            return False
        else:
            print('done')
            return self.load_project(filename)

    def close_projet(self):
        """Close the currently opened hdf5 project file."""
        if self.projet is not None:
            self.projet.close()
            self.projet = None

    def show_newproject_dialog(self):
        """Show the dialog to create a new project."""
        self.new_projet_dialog.reset_UI()
        self.new_projet_dialog.show()
 def home(self):
     btn_Quit = QPushButton("Quit", self)
     btn_Quit.clicked.connect(self.quitt)
     btn_Quit.move(1500, 0)
     btn_0 = QPushButton("Process data", self)
     btn_0.clicked.connect(self.processed_data)
     btn_0.move(0, 10)
     btn_0.adjustSize()
     self.label_0 = QLabel(self)
     self.label_0.setText("please process the data")
     self.label_0.move(0, 50)
     self.label_0.adjustSize()
     btn_1 = QPushButton("KNN method", self)
     btn_1.clicked.connect(self.knnmethod)
     btn_1.move(250, 350)
     btn_1.adjustSize()
     self.label_1 = QLabel(self)
     self.label_1.setText("")
     self.label_1.move(250, 400)
     self.label_1.adjustSize()
     btn_2 = QPushButton("Bayes", self)
     btn_2.clicked.connect(self.bayes)
     btn_2.move(650, 350)
     btn_2.adjustSize()
     self.label_2 = QLabel(self)
     self.label_2.setText("")
     self.label_2.move(650, 400)
     btn_3 = QPushButton("Decision_tree", self)
     btn_3.clicked.connect(self.decision_tree)
     btn_3.move(1000, 350)
     btn_3.adjustSize()
     self.label_3 = QLabel(self)
     self.label_3.setText("")
     self.label_3.move(1000, 400)
     btn_6 = QPushButton(
         "Next games you will bet on according to Decision Tree", self)
     btn_6.clicked.connect(self.knn_next_games)
     btn_6.move(1350, 600)
     btn_6.adjustSize()
     self.label_6 = QLabel(self)
     self.label_6.setText("")
     self.label_6.move(1350, 620)
     btn_5 = QPushButton("Next games you will bet on according to Bayes",
                         self)
     btn_5.clicked.connect(self.bayes_next_games)
     btn_5.resize(100, 100)
     btn_5.move(770, 600)
     btn_5.adjustSize()
     self.label_5 = QLabel(self)
     self.label_5.setText("")
     self.label_5.move(770, 620)
     btn_4 = QPushButton("Next games you will bet on according to KNN",
                         self)
     btn_4.clicked.connect(self.decision_tree_next_games)
     btn_4.resize(100, 100)
     btn_4.move(120, 600)
     btn_4.adjustSize()
     self.label_4 = QLabel(self)
     self.label_4.setText("")
     self.label_4.move(120, 620)
     self.show()
Example #32
0
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Analyze Twwet'
        self.left = 100
        self.top = 100
        self.width = 900
        self.height = 900
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setObjectName("Main")
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Create textbox
        self.textbox = QLineEdit(self)
        self.textbox.move(20, 20)
        self.textbox.resize(280, 40)

        # Create a button in the window
        self.button = QPushButton('Analyze Tweet', self)
        self.button.move(20, 80)
        self.button.adjustSize()

        # Create a button in the window
        self.resetButton = QPushButton('Reset', self)
        self.resetButton.adjustSize()
        self.resetButton.move(20, 160)

        # connect button to function on_click
        self.button.clicked.connect(self.on_click)
        self.resetButton.clicked.connect(self.on_reset_click)
        self.show()

    @pyqtSlot()
    def on_click(self):
        textboxValue = self.textbox.text()
        #QMessageBox.question(self, 'Message - pythonspot.com', "You typed: " + textboxValue, QMessageBox.Ok,
        #QMessageBox.Ok)
        #self.textbox.setText("")

        sent = clf.predict(tokenizePhrase(textboxValue))
        conf = clf.decision_function((tokenizePhrase(textboxValue)))
        print(conf)
        if abs(conf) < 0.25:
            self.setStyleSheet(
                "QWidget#Main {background-image: url(cloudy.png) 0 0 0 0 stretch stretch;}"
            )
        else:
            if sent[0] == 0:
                self.setStyleSheet(
                    "QWidget#Main {background-image: url(rainy.jpg) 0 0 0 0 stretch stretch;}"
                )
            else:
                self.setStyleSheet(
                    "QWidget#Main {background-image: url(sunny.jpg) 0 0 0 0 stretch stretch;}"
                )

    @pyqtSlot()
    def on_reset_click(self):
        self.textbox.setText("")
        self.setStyleSheet("QWidget#Main {background-image: none;}")
Example #33
0
class NeuronWidget:
    def __init__(self,
                 parent: QMainWindow,
                 value: Union[int, float] = 0,
                 x: Union[int, float] = 0,
                 y: Union[int, float] = 0,
                 radius: Union[int, float] = 0) -> None:
        self.parent = parent
        self.radius = radius
        self.x = x
        self.y = y

        self.value = min(1, max(0, value))
        self.color = (0, 0, 0)

        self.circle = QPushButton(parent=self.parent)
        self.circle.resize(self.radius * 2, self.radius * 2)
        self.circle.setStyleSheet(
            f"border-radius: {self.radius}px; border: 3px solid black; background: rgb{self.color}"
        )
        self.circle.move(self.x, self.y)
        self.circle.adjustSize()

        self.label = QLabel(parent=self.parent,
                            text=str(round(self.value, ndigits=2)))
        self.label.setAlignment(Qt.AlignCenter)
        self.label.move(self.x + self.radius // 2, self.y + self.radius // 2)
        self.label.resize(self.radius, self.radius)
        self.label.setStyleSheet(f"background: transparent")

        self.update()

    def move(self, x: Union[int, float], y: Union[int, float]) -> None:
        self.x = x
        self.y = y
        self.label.move(self.x + self.radius // 2, self.y + self.radius // 2)
        self.circle.move(self.x, self.y)

    def resize(self, radius: Union[int, float]) -> None:
        self.radius = radius
        self.circle.resize(self.radius * 2, self.radius * 2)
        self.label.resize(self.radius, self.radius)
        self.move(self.x, self.y)
        font_size = int(self.radius / 2)
        self.label.setStyleSheet(
            f"font-size: {font_size}px; background: transparent; color: rgb(0, 0, 0)"
        )

    def set_value(self, value: Union[int, float]) -> None:
        self.value = min(1, max(0, value))
        self.update()

    def update(self) -> None:
        self.label.setText(str(round(self.value, ndigits=2)))
        self.color = self.get_gradient()
        border_size = int(self.radius / 8)
        self.circle.setStyleSheet(
            f"border-radius: {self.radius}px; border: {border_size}px solid black; background: rgb{self.color}"
        )

    def get_gradient(self) -> Tuple[int, int, int]:
        r = 235
        g = (195 - 120) * (
            1 - self.value
        ) + 160  # Yes, some of values in this formula aren't described,
        # but it is really hard to do this. All I wanna say is that it is special formula to get orange gradient.
        b = 80

        r, g, b = min(255, max(0, r)), min(255, max(0, g)), min(
            255, max(0, b))  # these min and max just for be sure
        return r, g, b

    def geometry(self) -> QRect:
        return self.circle.geometry()
Example #34
0
class Window(QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50,50, 2000,1200)
        self.setWindowTitle("TdLog : betting sports")
        self.home()
        self.flag = 0
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.lightGray)
        self.setPalette(p)
        self.details_over_dtree_triggered = 0
        self.details_over_bayes_triggered = 0
        self.details_over_knn_triggered = 0
        
    def home(self):
        # we use the next button to recompute the overview in case we change threshold and we already had pushed
        # the method buttons (knn, decision tree and bayes)
        self.knn_method_triggered = 0
        self.decision_tree_method_triggered = 0
        self.bayes_method_triggered = 0
        self.flag = 0
        # labels are used to print the overview results under the method buttons
        self.label_1 = QLabel(self)
        self.label_1.setText("")
        self.label_2 = QLabel(self)
        self.label_2.setText("")
        self.label_3 = QLabel(self)
        self.label_3.setText("")
        self.btn_Quit = QPushButton("Quit", self)
        self.btn_Quit.clicked.connect(self.quitt)
        # we can change the used threshold with the QLineEdit and then push threshold button to save that threshold
        # value
        self.threshold = 0.5
        self.btn_Thresh = QPushButton("Threshold value", self)
        self.btn_Thresh.clicked.connect(self.threshold_value)
        self.label_Thresh = QLineEdit(self)
        self.label_Thresh.setText("0.5")
        self.label_Thresh_text = QLabel(self)
        self.label_Thresh_text.setText("")
        # at the beginning of the process, the user has to process data (cf the other file)
        self.btn_0 = QPushButton("Process data", self)
        self.btn_0.clicked.connect(self.processed_data)
        self.label_0 = QLabel(self)
        self.label_0.setText("Please process data")        
        # these are the method buttons
        self.btn_1 = QPushButton("KNN method", self)
        self.btn_1.clicked.connect(self.launch_knn)
        self.details_knn = QPushButton("details..", self)
        self.details_knn.clicked.connect(self.details)
        self.details_bayes = QPushButton("details..", self)
        self.details_bayes.clicked.connect(self.details)
        self.details_dtree = QPushButton("details..", self)
        self.details_dtree.clicked.connect(self.details)
        self.btn_2 = QPushButton("Bayes", self)
        self.btn_2.clicked.connect(self.launch_bayes)
        self.btn_3 = QPushButton("Decision_tree", self)
        self.btn_3.clicked.connect(self.launch_decision_tree)
        # these are the next games buttons, with labels to print the next game the user has to bet on 
        # to follow the path of the relating method
        self.btn_6 = QCheckBox("Next games you will bet on according to Decision Tree", self)
        self.btn_6.clicked.connect(self.next_games)
        self.label_6 = QLabel(self)
        self.label_6.setText("Please process data and try knn method \nbefore checking the box")
        self.btn_5 = QCheckBox("Next games you will bet on according to Bayes",self)
        self.btn_5.clicked.connect(self.next_games)
        self.label_5 = QLabel(self)
        self.label_5.setText("Please process data and try Bayes method \nbefore checking the box")
        self.btn_4 = QCheckBox("Next games you will bet on according to KNN", self)
        self.btn_4.clicked.connect(self.next_games)
        self.label_4 = QLabel(self)
        self.label_4.setText("Please process data and try decision tree \nmethod before checking the box")
        self.position()
        self.show()        
        
    def position(self):
        # Here, we organize the user interface
        # This interface fits to gregoire's screen, but not to badr screen. 
        # If it not fits your screen, please let us know your screen dimension and we will fastly 
        # edit this code to make it great.
        self.btn_Quit.move(1500,0)
        self.btn_0.move(0,10)
        self.btn_0.adjustSize()
        self.label_0.move(0,50)
        self.label_0.adjustSize()
        self.btn_Thresh.move(600,0)
        self.btn_Thresh.adjustSize()
        self.label_Thresh.move(650,50)
        self.label_Thresh_text.move(650,100)
        self.label_Thresh_text.adjustSize()
        self.btn_1.move(250,350)
        self.btn_1.adjustSize()
        self.details_knn.move(120,470)
        self.details_knn.adjustSize()
        self.label_1.move(250,400)
        self.btn_2.move(650,350)
        self.btn_2.adjustSize()
        self.details_bayes.move(520,470)
        self.details_bayes.adjustSize()
        self.label_2.move(650,400)
        self.btn_3.move(1000,350)
        self.btn_3.adjustSize()
        self.details_dtree.move(870,470)
        self.details_dtree.adjustSize()
        self.label_3.move(1000,400)
        self.btn_6.move(1350,600)
        self.btn_6.adjustSize()
        self.label_4.move(1350,620)
        self.label_4.adjustSize()
        self.btn_5.move(770,600)
        self.btn_5.adjustSize()
        self.label_5.move(770,620)
        self.btn_4.move(120,600)
        self.btn_4.adjustSize()
        self.label_6.move(120,620)
        self.label_5.adjustSize()
        self.label_6.adjustSize()
        

        
                
    def processed_data(self):
        dataprocess.process_files()        
        self.threshold = 0.5
        # Creating a training files from seasons 07-08 to 18-19
        self.keys_to_keep = ["FTR","B365H","B365D","B365A","HTGDBG","ATGDBG","HTPBG","ATPBG"]
        self.X =[]
        self.Y = []
        file_name_total = ""
        
        for k in range(7,19) :
            file_name = str(k)+"-"+str(k+1)+"_processed.csv"
            file_name_total = file_name_total+"""
            """+file_name
            df=pd.read_csv('Training_Files/France/'+file_name, sep=',')
            # sep = "," fot F1_processed or sep = ";" for training_file
            # We only keep "before-game data" except FTR which we will use to train our classification algorithm
            dataset = {}
            df_dict = df.to_dict()
            print(file_name)
            for key in self.keys_to_keep : 
                dataset[key] = df_dict[key]
            dataset_df = pd.DataFrame.from_dict(dataset)
            df_dict = dataset_df.T.to_dict()
            self.X+=[list(df_dict[i].values())[1:] for i in df_dict.keys()]
            self.Y+=[list(df_dict[i].values())[0] for i in df_dict.keys()]
        
        #check for NaN values
        flag = 0
        X_copy=[]
        Y_copy=[]
        for i in range(len(self.X)) :
            for k in range(len(self.X[i])):
                if math.isnan(self.X[i][k]):
                    flag = 1
            if flag ==0 :
                X_copy+=[self.X[i]]
                Y_copy+=[self.Y[i]]
            else :
                print("Incorrect data : " + str(i))
            flag = 0
        self.X = X_copy
        self.Y=Y_copy
        
        for i in range(len(self.Y)) : 
            if self.Y[i]=="H" : 
                self.Y[i]=0
            elif self.Y[i] =="D" : 
                self.Y[i]=1
            else :
                self.Y[i]=2
        self.label_0.setText(file_name_total +"\n data successfully processed")
        self.label_0.adjustSize()
        # allow user to use the other buttons
        self.flag = 1
        
    
    
    def quitt(self):
        self.close()
    
    def threshold_value(self):
        # we compare the threshold with a probability so it has to stand between 0 and 1
        if (float(self.label_Thresh.text()) > 1 or float(self.label_Thresh.text()) < 0):
            self.label_Thresh_text.setText("please enter a value between 0 and 1")
            self.label_Thresh_text.adjustSize()
        else :
            self.threshold = float(self.label_Thresh.text())
            if self.flag == 1:
                if self.knn_method_triggered == 1 :
                    self.launch_knn()
                if self.bayes_method_triggered == 1:
                    self.launch_bayes()    
                if self.decision_tree_method_triggered == 1 :
                    self.launch_decision_tree()
                
                if self.btn_4.checkState()==2 :
                    self.used_method = 2
                    self.print_next_games(self.used_method)        
                if self.btn_5.checkState() == 2:
                    self.used_method = 1
                    self.print_next_games(self.used_method)
                if self.btn_6.checkState() :
                    self.used_method = 0
                    self.print_next_games(self.used_method)
                self.details()    
    
    
    def launch_knn(self):
        self.method_number = 2
        self.method()
    
    def launch_decision_tree(self):
        self.method_number = 0
        self.method()
    
    def launch_bayes(self):
        self.method_number = 1
        self.method()
        
    
    def method(self):
        if self.flag == 1:
            r = random.random()
            random.shuffle(self.X, lambda:r)
            random.shuffle(self.Y, lambda:r)
            # we train the model with 80% of data then test it with the remaining part 
            training_X = self.X[:int(len(self.X)-len(self.X)/5)]
            testing_X = self.X[int(len(self.X)-len(self.X)/5):]       
            training_Y = self.Y[:int(len(self.Y)-len(self.Y)/5)]
            testing_Y = self.Y[int(len(self.Y)-len(self.Y)/5):]    
            if self.method_number == 0:
                self.decision_tree_method_triggered = 1
                self.dtree_model = DecisionTreeClassifier(max_depth = 10).fit(training_X, training_Y) 
                predictions = self.dtree_model.predict_proba(testing_X)
            if self.method_number == 1:
                self.bayes_method_triggered = 1
                self.gnb = GaussianNB().fit(training_X, training_Y) 
                predictions = self.gnb.predict_proba(testing_X)
            if self.method_number == 2:
                self.knn_method_triggered = 1    
                self.knn = KNeighborsClassifier(n_neighbors = 3).fit(training_X, training_Y) 
                # creating a confusion matrix 
                predictions = self.knn.predict_proba(testing_X) 
            accepted_games = []
            accepted_Y = []
            accepted_odd =[]
            sum_true_odd = 0
            number_of_won_games = 0
            # X_bet stands for the current cash over time
            X_bet = [20]
            for k in range (len(predictions)) : 
                for i in range(len(predictions[k])) : 
                    if predictions[k][i]>self.threshold : 
                        accepted_games+=[i]
                        accepted_Y+=[testing_Y[k]]
                        accepted_odd+=[testing_X[k][i]]
                        l = len(X_bet)
                        if testing_Y[k] == i:
                            sum_true_odd += testing_X[k][i]
                            number_of_won_games += 1
                            X_bet.append(X_bet[l-1]+20*((sum_true_odd/number_of_won_games) - 1))
                        else :
                            X_bet.append(X_bet[l-1]-20)
            if self.method_number == 0:
                self.X_bet_dtree = X_bet
            if self.method_number == 1:
                self.X_bet_bayes = X_bet
            if self.method_number == 2:
                self.X_bet_knn = X_bet
            cm = confusion_matrix(accepted_Y, accepted_games) 
            # true class stands for the right answers
            true_class = cm[0][0]+cm[1][1]+cm[2][2]
            correct_answers = true_class/len(accepted_Y)
            correct_answers = round(correct_answers,4)
            correct_answers = str(correct_answers)
            average_bet = sum_true_odd/number_of_won_games
            average_bet = round(average_bet,4)
            average_bet = str(average_bet)
            average_gain = (true_class/len(accepted_Y))*(sum_true_odd/(true_class))*20-20
            average_gain = round(average_gain,4)
            average_gain = str(average_gain)
            
            if self.method_number == 2:
                # it prints an overview
                self.label_1.setText("KNN correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
                self.label_1.adjustSize()
                # if we checked the box it prints the next games
                if self.btn_4.checkState() == 2:
                    self.used_method = 2
                    self.print_next_games(self.used_method)
                # if we pushed knn details button it plots again the graph
                if self.details_over_knn_triggered == 1:
                    self.details()
            if self.method_number ==1:
                self.label_2.setText("Bayes correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
                self.label_2.adjustSize()
                if self.btn_5.checkState()==2:
                    self.used_method = 1
                    self.print_next_games(self.used_method)  
                if self.details_over_bayes_triggered == 1:
                    self.details()
            if self.method_number == 0:
                self.label_3.setText("Decision tree correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
                self.label_3.adjustSize()
                if self.btn_6.checkState()==2:
                    self.used_method = 0
                    self.print_next_games(self.used_method) 
                if self.details_over_dtree_triggered == 1:    
                    self.details()
                    
        else :
            self.label_1.setText("""Please process the data before  
            starting analyse them ...""")
            self.label_1.adjustSize()
            self.label_2.setText("""Please process the data before 
            starting analyse them ...""")
            self.label_2.adjustSize()  
            self.label_3.setText("""Please process the data before 
            starting analyse them ...""")
            self.label_3.adjustSize()
            

### Those  functions print on the user interface the next games and teams he has to bet on
    
    def next_games(self):
        if self.flag == 1 :
            if self.btn_4.checkState() == 2 :
                self.used_method = 2
                self.print_next_games(self.used_method)
            if self.btn_5.checkState() == 2 :
                self.used_method = 1
                self.print_next_games(self.used_method)
            if self.btn_6.checkState() == 2:
                self.used_method = 0
                self.print_next_games(self.used_method)            
            
    def print_next_games(self, method_name):
        df = pd.read_csv("Next_games.csv", sep=';')            
        dataset = {}
        df_dict_origin = df.to_dict()
        for key in self.keys_to_keep : 
            dataset[key] = df_dict_origin[key]
        dataset_df = pd.DataFrame.from_dict(dataset)
        df_dict = dataset_df.T.to_dict()           
        X =[]
        X +=[list(df_dict[i].values())[1:] for i in df_dict.keys()]
        if method_name == 0 :
            predictions = self.dtree_model.predict_proba(X)
        if method_name == 1 :
            predictions = self.gnb.predict_proba(X)
        if method_name == 2 :
            predictions = self.knn.predict_proba(X)
        Games_you_need_to_bet_on = []
        number_of_bets = 0
        for i in range(len(predictions)) :
            # we browse predictions and print the team and the game if our prediction are good enough to bet on it
            if (predictions[i][0] > self.threshold) :
                # if probability of home team victory is higher than the threshold, we bet on home team
                Games_you_need_to_bet_on.append("\nBet on %s during %s against %s on %s" %(df_dict_origin["HomeTeam"][i],df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
                number_of_bets += 1
            if (predictions[i][1] > self.threshold) :
                Games_you_need_to_bet_on.append("\nBet on a draw during %s against %s on %s"%(df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
                number_of_bets += 1
            if (predictions[i][2] > self.threshold) :
                Games_you_need_to_bet_on.append("\nBet on %s during %s against %s on %s"%(df_dict_origin["AwayTeam"][i],df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
                number_of_bets += 1
        if method_name == 0:
            self.label_4.setText(' '.join(Games_you_need_to_bet_on))
            self.label_4.adjustSize()
        if method_name == 1:
            self.label_5.setText(' '.join(Games_you_need_to_bet_on))
            self.label_5.adjustSize()
        if method_name == 2:
            self.label_6.setText(' '.join(Games_you_need_to_bet_on))
            self.label_6.adjustSize()
            

### Those functions plot the details of current cash over time according relating to the differents kinds of method we consider

    
    def details(self):
        if self.flag == 1:  
            if self.decision_tree_method_triggered == 1:
                self.details_over_dtree_triggered = 1
            if self.bayes_method_triggered == 1:
                self.details_over_bayes_triggered = 1
            if self.knn_method_triggered == 1:
                self.details_over_knn_triggered = 1
            self.draw()

    def draw(self):
        # we plot the three graphs on the same window to compare them easily
        plt.figure(1)
        plt.clf()
        plt.subplot(221)
        if self.details_over_dtree_triggered == 1:  
            l = len(self.X_bet_dtree)
            Y = [1]*(l)
            for i in range(1,l):
                Y[i] = Y[i-1]+1               
            plt.figure(1)
            plt.plot(Y, self.X_bet_dtree, 'b')
            plt.title("Decision Tree method")
            plt.ylabel("Current_cash")
            plt.xlabel("Time")
        plt.subplot(222)
        if self.details_over_bayes_triggered == 1:  
            l = len(self.X_bet_bayes)
            Y = [1]*(l)
            for i in range(1,l):
                Y[i] = Y[i-1]+1               
            plt.plot(Y, self.X_bet_bayes, 'm')
            plt.title("Bayes method")
            plt.ylabel("Current_cash")
            plt.xlabel("Time")
        plt.subplot (223)
        if self.details_over_knn_triggered == 1:
            l = len(self.X_bet_knn)
            Y = [1]*(l)
            for i in range(1,l):
                Y[i] = Y[i-1]+1      
            plt.plot(Y, self.X_bet_knn, 'g')
            plt.title("KNN method")
            plt.ylabel("Current_cash")
            plt.xlabel("Time")
        plt.draw()     
Example #35
0
class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.timer = QTimer()
        self.timer.timeout.connect(self.tick)
        self.days = 0
        self.totalPapers = 0

        self.perfect = {
            '1': [[6, 2], [1, 4, 5, 8], [3, 7]],
            '2': [[1, 2, 8], [6, 7], [3, 4, 5]],
            '3': [[4, 5, 6, 1, 3], [8], [2, 7]],
            '4': [[7], [], [1, 2, 3, 4, 5, 6, 8]],
            '5': [[1, 7], [8, 2], [3, 4, 5, 6]],
            '6': [[2, 8, 1, 7], [3], [4, 5, 6]],
            '7': [[6, 3, 7, 4, 5], [1], [2, 8]],
            '8': [[8, 2, 6, 4], [1, 5], [3, 7]]
        }
        self.levelOfKnowledge = 0
        self.setFont(QtGui.QFont("Bahnschrift Light SemiCondensed", 20))
        self.setMouseTracking(True)
        self.setWindowTitle('Game maker')
        self.setGeometry(10, 10, 1024, 768)
        self.setFixedSize(1024, 768)
        palette = QPalette()
        img = QImage('mainWindow.png')
        scaled = img.scaled(self.size(),
                            Qt.KeepAspectRatioByExpanding,
                            transformMode=Qt.SmoothTransformation)
        palette.setBrush(QPalette.Window, QBrush(scaled))
        self.setPalette(palette)
        pixmap = QPixmap('shopButton.png')
        self.shopButton = QLabel('', self)
        self.shopButton.setPixmap(pixmap)
        self.shopButton.setMouseTracking(True)
        self.shopButton.move(500, 7)
        pixmap = QPixmap('devButton.png')
        self.devButton = QLabel('', self)
        self.devButton.setMouseTracking(True)
        self.devButton.setPixmap(pixmap)
        self.devButton.move(700, 7)
        self.cash = 100
        self.money = QLabel("Деньги:\n    100$", self)
        self.money.move(10, 7)
        self.subs = QLabel("Фанаты:\n   0", self)
        self.subs.move(140, 7)
        self.date = QLabel("Дни:\n     0", self)
        self.date.move(280, 7)
        self.table = QLabel(
            'Создайте свою первую игру! \n  \nЗаработано за все дни: \n 0',
            self)
        self.table.move(150, 200)
        self.table.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.nalog = QLabel("До налога: 30 \n Налог: 0", self)
        self.nalog.move(800, 105)
        self.nalog.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.shop = QWidget(self)
        self.shop.move(10000, 10000)
        self.shop.resize(400, 353)
        self.shop.setMouseTracking(True)
        self.shopItem1 = QLabel('', self.shop)
        self.shopItem1.setPixmap(QPixmap('shopItem1.png'))
        self.shopItem1.move(10, 10)
        self.shopItem1.setMouseTracking(True)
        self.shopItem2 = QLabel('', self.shop)
        self.shopItem2.setPixmap(QPixmap('shopItem22.png'))
        self.shopItem2.move(200, 10)
        self.shopItem2.setMouseTracking(True)
        self.shopItem3 = QLabel('', self.shop)
        self.shopItem3.setPixmap(QPixmap('shopItem4.png'))
        self.shopItem3.move(10, 250)
        self.shopItem3.setMouseTracking(True)
        self.shopItem4 = QLabel('', self.shop)
        self.shopItem4.setPixmap(QPixmap('shopItem4.png'))
        self.shopItem4.move(200, 250)
        self.shopItem4.setMouseTracking(True)
        self.shopExit = QLabel('', self.shop)
        self.shopExit.setPixmap(QPixmap('shopExit.png'))
        self.shopExit.move(360, 10)
        self.shopExit.setMouseTracking(True)
        self.shop.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.shopOn = False

        self.devPage1 = QWidget(self)
        self.devPage1.move(10000, 10000)
        self.devPage1.resize(600, 330)
        self.devPage1.setMouseTracking(True)
        self.devPage1.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.theme = 0
        self.style = 0
        self.type = 0
        self.platform = 0
        self.styles = QGroupBox('Жанры', self.devPage1)
        self.styles.move(10, 10)
        self.styles.setMouseTracking(True)
        self.style1 = QRadioButton('Приключения', self.styles)
        self.style1.move(10, 20)
        self.style1.toggle()
        self.style2 = QRadioButton('Шутер', self.styles)
        self.style2.move(100, 20)
        self.style3 = QRadioButton('Слэшэр', self.styles)
        self.style3.move(10, 45)
        self.style4 = QRadioButton('MMO', self.styles)
        self.style4.move(100, 45)
        self.style5 = QRadioButton('MOBA', self.styles)
        self.style5.move(10, 70)
        self.style6 = QRadioButton('RPG', self.styles)
        self.style6.move(100, 70)
        self.style7 = QRadioButton('Симулятор', self.styles)
        self.style7.move(10, 95)
        self.style8 = QRadioButton('Кооператив', self.styles)
        self.style8.move(100, 95)
        self.styles.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.styles.setFont(QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.style1.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style2.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style3.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style4.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style5.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style6.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style7.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style8.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.style1.adjustSize()
        self.style2.adjustSize()
        self.style3.adjustSize()
        self.style4.adjustSize()
        self.style5.adjustSize()
        self.style6.adjustSize()
        self.style7.adjustSize()
        self.style8.adjustSize()
        self.styles.adjustSize()

        self.themes = QGroupBox('Темы', self.devPage1)
        self.themes.move(300, 10)
        self.themes.setMouseTracking(True)
        self.theme1 = QRadioButton('Космос', self.themes)
        self.theme1.move(10, 20)
        self.theme1.toggle()
        self.theme2 = QRadioButton('Вестерн', self.themes)
        self.theme2.move(120, 20)
        self.theme3 = QRadioButton('Фэнтэзи', self.themes)
        self.theme3.move(10, 45)
        self.theme4 = QRadioButton('Ферма', self.themes)
        self.theme4.move(120, 45)
        self.theme5 = QRadioButton('Детектив', self.themes)
        self.theme5.move(10, 70)
        self.theme6 = QRadioButton('Война', self.themes)
        self.theme6.move(120, 70)
        self.theme7 = QRadioButton('Средневековье', self.themes)
        self.theme7.move(10, 95)
        self.theme8 = QRadioButton('Будущее', self.themes)
        self.theme8.move(120, 95)
        self.themes.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.themes.setFont(QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.theme1.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme2.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme3.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme4.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme5.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme6.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme7.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme8.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.theme1.adjustSize()
        self.theme2.adjustSize()
        self.theme3.adjustSize()
        self.theme4.adjustSize()
        self.theme5.adjustSize()
        self.theme6.adjustSize()
        self.theme7.adjustSize()
        self.theme8.adjustSize()
        self.themes.adjustSize()

        self.platforms = QGroupBox('Платформы', self.devPage1)
        self.platforms.move(10, 150)
        self.platforms.setMouseTracking(True)
        self.platform1 = QRadioButton('MacOs', self.platforms)
        self.platform1.move(10, 20)
        self.platform1.toggle()
        self.platform2 = QRadioButton('Android', self.platforms)
        self.platform2.move(120, 20)
        self.platform3 = QRadioButton('IOS', self.platforms)
        self.platform3.move(10, 45)
        self.platform4 = QRadioButton('PC', self.platforms)
        self.platform4.move(120, 45)
        self.platforms.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.platforms.setFont(
            QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.platform1.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.platform2.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.platform3.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.platform4.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.platform1.adjustSize()
        self.platform2.adjustSize()
        self.platform3.adjustSize()
        self.platform4.adjustSize()
        self.platforms.adjustSize()

        self.types = QGroupBox('Тип', self.devPage1)
        self.types.move(300, 150)
        self.types.setMouseTracking(True)
        self.type1 = QRadioButton('Инди', self.types)
        self.type1.move(10, 20)
        self.type1.toggle()
        self.type2 = QRadioButton('A', self.types)
        self.type2.move(120, 20)
        self.type3 = QRadioButton('AA', self.types)
        self.type3.move(10, 45)
        self.type4 = QRadioButton('AAA', self.types)
        self.type4.move(120, 45)
        self.types.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.types.setFont(QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.type1.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.type2.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.type3.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.type4.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.type1.adjustSize()
        self.type2.adjustSize()
        self.type3.adjustSize()
        self.type4.adjustSize()
        self.types.adjustSize()

        self.pushToDev = QPushButton('Начать', self.devPage1)
        self.pushToDev.setMouseTracking(True)
        self.pushToDev.move(280, 270)
        self.pushToDev.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;'
            'background-color: rgb(207, 162, 198);')
        self.pushToDev.clicked.connect(self.showDevPage2)

        self.devPage2 = QWidget(self)
        self.devPage2.move(10000, 10000)
        self.devPage2.resize(600, 330)
        self.devPage2.setMouseTracking(True)
        self.devPage2.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.devPage1On = False
        self.devPage2On = False

        self.levelOne = QGroupBox('Знания I', self.devPage2)
        self.levelOne.move(10, 10)
        self.levelOne.setMouseTracking(True)
        self.techno11 = QCheckBox('2D(5$)', self.levelOne)
        self.techno11.move(10, 20)
        self.techno11.setMouseTracking(True)
        self.techno12 = QCheckBox('6 Bit Sound(15$)', self.levelOne)
        self.techno12.move(150, 20)
        self.techno13 = QCheckBox('HD(25$)', self.levelOne)
        self.techno13.move(10, 80)
        self.techno14 = QCheckBox('C++(35$)', self.levelOne)
        self.techno14.move(150, 80)
        self.levelOne.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.levelOne.setFont(
            QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.techno11.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno12.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno13.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno14.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno14.adjustSize()
        self.techno13.adjustSize()
        self.techno12.adjustSize()
        self.techno11.adjustSize()
        self.levelOne.adjustSize()
        self.techno12.setMouseTracking(True)
        self.techno13.setMouseTracking(True)
        self.techno14.setMouseTracking(True)

        self.levelTwo = QGroupBox('Знания II', self.devPage2)
        self.levelTwo.move(10, 170)
        self.levelTwo.setMouseTracking(True)
        self.techno21 = QCheckBox('3D(100$)', self.levelTwo)
        self.techno21.move(10, 20)
        self.techno21.setMouseTracking(True)
        self.techno22 = QCheckBox('8 Bit Sound(300$)', self.levelTwo)
        self.techno22.move(150, 20)
        self.techno23 = QCheckBox('Full HD(500$)', self.levelTwo)
        self.techno23.move(10, 80)
        self.techno24 = QCheckBox('C(1000$)', self.levelTwo)
        self.techno24.move(150, 80)
        self.levelTwo.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.levelTwo.setFont(
            QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.techno21.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno22.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno23.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno24.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno24.adjustSize()
        self.techno23.adjustSize()
        self.techno22.adjustSize()
        self.techno21.adjustSize()
        self.levelTwo.adjustSize()
        self.techno22.setMouseTracking(True)
        self.techno23.setMouseTracking(True)
        self.techno24.setMouseTracking(True)

        self.levelThree = QGroupBox('Знания III', self.devPage2)
        self.levelThree.move(280, 10)
        self.levelThree.setMouseTracking(True)
        self.techno31 = QCheckBox('4D(3500$)', self.levelThree)
        self.techno31.move(10, 20)
        self.techno31.setMouseTracking(True)
        self.techno32 = QCheckBox('16 Bit Sound(7000$)', self.levelThree)
        self.techno32.move(150, 20)
        self.techno33 = QCheckBox('2K HD(13000$)', self.levelThree)
        self.techno33.move(10, 80)
        self.techno34 = QCheckBox('C#(20000$)', self.levelThree)
        self.techno34.move(150, 80)
        self.levelThree.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.levelThree.setFont(
            QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.techno31.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno32.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno33.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno34.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno34.adjustSize()
        self.techno33.adjustSize()
        self.techno32.adjustSize()
        self.techno31.adjustSize()
        self.techno31.setMouseTracking(True)
        self.techno32.setMouseTracking(True)
        self.techno34.setMouseTracking(True)
        self.techno33.setMouseTracking(True)
        self.levelThree.adjustSize()

        self.timeToEnd = 0
        self.timeDev = False

        self.levelFour = QGroupBox('Знания IV', self.devPage2)
        self.levelFour.move(280, 170)
        self.levelFour.setMouseTracking(True)
        self.techno41 = QCheckBox('5D(50000$)', self.levelFour)
        self.techno41.setMouseTracking(True)
        self.techno41.move(10, 20)
        self.techno42 = QCheckBox('24 Bit Sound(60000$)', self.levelFour)
        self.techno42.move(150, 20)
        self.techno43 = QCheckBox('Ultra HD(70000$)', self.levelFour)
        self.techno43.move(10, 80)
        self.techno44 = QCheckBox('Python(90000$)', self.levelFour)
        self.techno44.move(150, 80)
        self.levelFour.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;')
        self.levelFour.setFont(
            QtGui.QFont("Bahnschrift Light SemiCondensed", 12))
        self.techno41.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno42.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno43.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno44.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')
        self.techno44.adjustSize()
        self.techno43.adjustSize()
        self.techno42.adjustSize()
        self.techno41.adjustSize()
        self.techno42.setMouseTracking(True)
        self.techno44.setMouseTracking(True)
        self.techno43.setMouseTracking(True)
        self.levelFour.adjustSize()

        self.pushToStartDev = QPushButton('Начать', self.devPage2)
        self.pushToStartDev.setMouseTracking(True)
        self.pushToStartDev.move(280, 290)
        self.pushToStartDev.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;'
            'background-color: rgb(207, 162, 198);')
        self.pushToStartDev.clicked.connect(self.showDevPage3)

        self.timeToEnd = 5
        self.totalMoney = QLabel('Итого: 0', self.devPage2)
        self.totalMoney.move(100, 290)
        self.totalMoney.setStyleSheet(
            'border-style: solid; border-width: 1px; border-color: black;'
            'background-color: rgb(207, 162, 198);')

        self.devPage1Exit = QLabel('', self.devPage1)
        self.devPage1Exit.setPixmap(QPixmap('shopExit.png'))
        self.devPage1Exit.move(560, 5)
        self.devPage1Exit.adjustSize()
        self.devPage1Exit.setMouseTracking(True)

        self.devPage2Exit = QLabel('', self.devPage2)
        self.devPage2Exit.setPixmap(QPixmap('shopExit.png'))
        self.devPage2Exit.move(560, 5)
        self.devPage2Exit.adjustSize()
        self.devPage2Exit.setMouseTracking(True)

        self.devPage3 = QWidget(self)
        self.devPage3.move(10000, 10000)
        self.devPage3.resize(600, 330)
        self.devPage3.setMouseTracking(True)
        self.devPage3.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')

        self.warning = QLabel('', self.devPage2)
        self.warning.move(400, 290)
        self.warning.setFont(QtGui.QFont("Bahnschrift Light SemiCondensed",
                                         10))
        self.warning.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;')

        self.timeDev = False
        self.timeSale = False
        self.fans = 0
        # ////

        self.startPage = QWidget(self)
        self.startPage.move(0, 0)
        self.startPage.setFont(
            QtGui.QFont("Bahnschrift Light SemiCondensed", 30))
        self.startPage.resize(1024, 768)
        self.startPage.setStyleSheet(
            'border-style: solid; border-width: 3px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.startText = QLabel(
            'Здравствуй, начинающий разработчик! Начиная игру, сначала \n тебе потребуются'
            'купить набор "Знания I" в магазине, затем \nты можешь начать разработку своей '
            'первой игры в разделе\n "Разработка". на первом этапе ты можешь выбрать тему и '
            'жанр\n игры, а также платформу и тип,\которые открываются с каждым\n набором знаний. '
            'На втором этапе тебе будет доступен выбор \nтехнологий, который с каждым набором '
            'знаний\n будет увеличиваться. Так же каждые 30 дней тебе придется \nплатить налог, '
            'так что будь осторожен!. Удачи!! ', self.startPage)
        self.startText.setStyleSheet(
            'border-style: solid; border-width: 0px; border-color: black;'
            'background-color: rgb(207, 162, 98);')
        self.startText.move(10, 10)
        self.startButton = QPushButton('Начать', self.startPage)
        self.startButton.move(700, 600)
        self.startButton.adjustSize()
        self.startButton.clicked.connect(self.start)

    def start(self):  # начало игры
        self.startPage.move(10000, 10000)
        self.timer.start(1550)

    def mouseMoveEvent(self, event):  # обработка передвижения мыши
        if 500 <= event.x() <= 645 and 7 <= event.y() <= 95:
            self.shopButton.setPixmap(QPixmap('shopButton2.png'))
        elif 700 <= event.x() <= 845 and 7 <= event.y() <= 95:
            self.devButton.setPixmap(QPixmap('devButton2.png'))
        elif 310 <= event.x() <= 455 and 211 <= event.y(
        ) <= 297 and self.shopOn:
            self.shopItem1.setPixmap(QPixmap('shopItem12.png'))
        elif 500 <= event.x() <= 644 and 211 <= event.y(
        ) <= 297 and self.shopOn:
            self.shopItem2.setPixmap(QPixmap('shopItem2.png'))
        elif 310 <= event.x() <= 455 and 461 <= event.y(
        ) <= 547 and self.shopOn:
            self.shopItem3.setPixmap(QPixmap('shopItem32.png'))
        elif 500 <= event.x() <= 644 and 461 <= event.y(
        ) <= 547 and self.shopOn:
            self.shopItem4.setPixmap(QPixmap('shopItem42.png'))
        elif self.devPage2On:
            self.totalMon = self.cashToDev
            if self.techno11.isChecked():
                self.totalMon += 5
            if self.techno12.isChecked():
                self.totalMon += 10
            if self.techno13.isChecked():
                self.totalMon += 20
            if self.techno14.isChecked():
                self.totalMon += 35
            if self.techno21.isChecked():
                self.totalMon += 100
            if self.techno22.isChecked():
                self.totalMon += 300
            if self.techno23.isChecked():
                self.totalMon += 500
            if self.techno24.isChecked():
                self.totalMon += 1000
            if self.techno31.isChecked():
                self.totalMon += 3500
            if self.techno32.isChecked():
                self.totalMon += 7000
            if self.techno33.isChecked():
                self.totalMon += 13000
            if self.techno34.isChecked():
                self.totalMon += 20000
            if self.techno41.isChecked():
                self.totalMon += 50000
            if self.techno42.isChecked():
                self.totalMon += 60000
            if self.techno43.isChecked():
                self.totalMon += 70000
            if self.techno44.isChecked():
                self.totalMon += 90000
            self.totalMoney.setText('Итого: ' + str(self.totalMon))
            self.totalMoney.adjustSize()
        else:
            self.shopButton.setPixmap(QPixmap('shopButton.png'))
            self.shopItem1.setPixmap(QPixmap('shopItem1.png'))
            self.devButton.setPixmap(QPixmap('devButton.png'))
            self.shopItem2.setPixmap(QPixmap('shopItem22.png'))
            self.shopItem3.setPixmap(QPixmap('shopItem3.png'))
            self.shopItem4.setPixmap(QPixmap('shopItem4.png'))

    def mousePressEvent(self, event):  # обработка нажатия кнопок мыши
        if event.button() == Qt.LeftButton:
            if 500 <= event.x() <= 645 and 7 <= event.y() <= 95:
                self.showShop()
            elif 700 <= event.x() <= 845 and 7 <= event.y() <= 95:
                self.showDev()
            elif 660 <= event.x() <= 690 and 211 <= event.y(
            ) <= 241 and self.shopOn:
                self.shopOn = False
                self.shop.move(10000, 10000)
            elif 760 <= event.x() <= 790 and 105 <= event.y(
            ) <= 135 and self.devPage1On:
                self.devPage1On = False
                self.devPage1.move(1000, 1000)
                self.timer.start()
            elif 760 <= event.x() <= 790 and 105 <= event.y(
            ) <= 135 and self.devPage2On:
                self.devPage2On = False
                self.timer.start()
                self.devPage2.move(10000, 10000)
            elif 310 <= event.x() <= 455 and 211 <= event.y(
            ) <= 297 and self.shopOn:
                if self.levelOfKnowledge < 1 and self.cash >= 5:
                    self.levelOfKnowledge = 1
                    self.cash -= 5
                    self.money.setText('Деньги: \n   ' + str(self.cash))
            elif 500 <= event.x() <= 644 and 211 <= event.y(
            ) <= 297 and self.shopOn:
                if self.levelOfKnowledge < 2 and self.cash >= 500:
                    self.levelOfKnowledge = 2
                    self.cash -= 500
                    self.money.setText('Деньги: \n   ' + str(self.cash))
            elif 310 <= event.x() <= 455 and 461 <= event.y(
            ) <= 547 and self.shopOn:
                if self.levelOfKnowledge < 3 and self.cash >= 20000:
                    self.levelOfKnowledge = 3
                    self.cash -= 20000
                    self.money.setText('Деньги: \n   ' + str(self.cash))
            elif 500 <= event.x() <= 644 and 461 <= event.y(
            ) <= 547 and self.shopOn:
                if self.levelOfKnowledge < 4 and self.cash >= 200000:
                    self.levelOfKnowledge = 4
                    self.cash -= 200000
                    self.money.setText('Деньги: \n   ' + str(self.cash))

    def showShop(self):  # активация окошка магазина
        self.shopOn = True
        self.shop.move(300, 200)

    def showDev(self):  # активация окошка первого этапа разработки игры
        self.devPage1On = True
        self.timer.stop()
        self.platform1.setEnabled(False)
        self.platform2.setEnabled(False)
        self.platform3.setEnabled(False)
        self.platform4.setEnabled(False)
        self.type1.setEnabled(False)
        self.type2.setEnabled(False)
        self.type3.setEnabled(False)
        self.type4.setEnabled(False)
        if self.levelOfKnowledge >= 1:
            self.platform1.setEnabled(True)
            self.type1.setEnabled(True)
        if self.levelOfKnowledge >= 2:
            self.platform2.setEnabled(True)
            self.type2.setEnabled(True)
        if self.levelOfKnowledge >= 3:
            self.platform3.setEnabled(True)
            self.type3.setEnabled(True)
        if self.levelOfKnowledge >= 4:
            self.platform4.setEnabled(True)
            self.type4.setEnabled(True)
        self.devPage1.move(200, 100)

    def tick(self):  # описание действия таймера
        if self.cash < 0:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Warning)

            msg.setText("Вы проиграли!:(")
            msg.setWindowTitle("Проигрыш")
            retval = msg.exec_()
            if retval == QMessageBox.Ok:
                sys.exit(app.exec_())
        self.days += 1
        self.date.setText('Дни:\n   ' + str(self.days))
        self.date.adjustSize()
        if self.timeDev:
            if self.timeToEnd > 1:
                self.timeToEnd -= 1
                self.table.setText('Дней до релиза: \n' + str(self.timeToEnd))
                self.table.adjustSize()
            else:
                self.relise()
        elif self.timeSale:
            if self.timeToEnd > 0:
                self.timeToEnd -= 1
                self.sale()
            else:
                self.table.setText(
                    'Конец продаж! \n  \nЗаработано за все дни: \n' +
                    str(self.totalPapers))
                self.table.adjustSize()
                self.timeSale = False
                self.timeToEnd = 5
        if self.days % 30 == 0:
            print(2)
            self.nalog.setText('Плоти Налог!!')
            self.nalog.adjustSize()
            self.cash -= int(
                (self.totalPapers / (self.days / 30) + self.fans /
                 (self.days / 30))) + self.levelOfKnowledge * self.days * 2
            self.money.setText('Деньги: \n   ' + str(self.cash))
            self.money.adjustSize()
        else:
            self.nalog.setText("До налога:" + str(30 - self.days % 30) +
                               "\n Налог: " + str(
                                   int((self.totalPapers /
                                        (self.days / 30) + self.fans /
                                        (self.days / 30))) +
                                   self.levelOfKnowledge * self.days * 2))
            self.nalog.adjustSize()

    def showDevPage2(self):  # показывается окошко второго этапа разработки
        self.cashToDev = 0
        if self.levelOfKnowledge > 0:
            if self.theme1.isChecked():
                self.theme = 1
            elif self.theme2.isChecked():
                self.theme = 2
            elif self.theme3.isChecked():
                self.theme = 3
            elif self.theme4.isChecked():
                self.theme = 4
            elif self.theme5.isChecked():
                self.theme = 5
            elif self.theme6.isChecked():
                self.theme = 6
            elif self.theme7.isChecked():
                self.theme = 7
            elif self.theme8.isChecked():
                self.theme = 8
            if self.style1.isChecked():
                self.style = 1
            elif self.style2.isChecked():
                self.style = 2
            elif self.style3.isChecked():
                self.style = 3
            elif self.style4.isChecked():
                self.style = 4
            elif self.style5.isChecked():
                self.style = 5
            elif self.style6.isChecked():
                self.style = 6
            elif self.style7.isChecked():
                self.style = 7
            elif self.style8.isChecked():
                self.style = 8
            elif self.type1.isChecked():
                self.type = 1
                self.cashToDev += 10
            elif self.type2.isChecked():
                self.type = 2
                self.cashToDev += 300
            elif self.type3.isChecked():
                self.type = 3
                self.cashToDev += 4000
            elif self.type4.isChecked():
                self.cashToDev += 40000
                self.type = 4
            if self.platform1.isChecked():
                self.platform = 1
                self.cashToDev += 10
            elif self.platform2.isChecked():
                self.platform = 2
                self.cashToDev += 400
            elif self.platform3.isChecked():
                self.platform = 3
                self.cashToDev += 10000
            elif self.platform4.isChecked():
                self.platform = 4
                self.cashToDev += 60000
            self.devPage1On = False
            self.totalMoney.setText('Итого: ' + str(self.cashToDev))
            self.totalMoney.adjustSize()
            self.devPage1.move(10000, 10000)
            self.levelOne.setEnabled(False)
            self.levelTwo.setEnabled(False)
            self.levelThree.setEnabled(False)
            self.levelFour.setEnabled(False)

            self.type4.setEnabled(False)
            if self.levelOfKnowledge >= 1:
                self.levelOne.setEnabled(True)
            if self.levelOfKnowledge >= 2:
                self.levelTwo.setEnabled(True)
            if self.levelOfKnowledge >= 3:
                self.levelThree.setEnabled(True)
            if self.levelOfKnowledge >= 4:
                self.levelFour.setEnabled(True)
            self.devPage2On = True
            self.devPage2.move(200, 100)

    def showDevPage3(self):
        self.totalTechno = 0
        if self.techno11.isChecked():
            self.totalTechno += 0.5
        if self.techno12.isChecked():
            self.totalTechno += 0.5
        if self.techno13.isChecked():
            self.totalTechno += 0.5
        if self.techno14.isChecked():
            self.totalTechno += 1
        if self.techno21.isChecked():
            self.totalTechno += 4
        if self.techno22.isChecked():
            self.totalTechno += 4
        if self.techno23.isChecked():
            self.totalTechno += 4
        if self.techno24.isChecked():
            self.totalTechno += 8
        if self.techno31.isChecked():
            self.totalTechno += 64
        if self.techno32.isChecked():
            self.totalTechno += 64
        if self.techno33.isChecked():
            self.totalTechno += 64
        if self.techno34.isChecked():
            self.totalTechno += 64
        if self.techno41.isChecked():
            self.totalTechno += 256
        if self.techno42.isChecked():
            self.totalTechno += 256
        if self.techno43.isChecked():
            self.totalTechno += 512
        if self.techno44.isChecked():
            self.totalTechno += 512
        if self.cash < self.totalMon:
            self.warning.setText('Недостаточно денег')
            self.warning.adjustSize()
        elif self.totalTechno == 0:
            self.warning.setText('Выберите хотя бы 1 технологию')
            self.warning.adjustSize()
        else:
            self.cash -= self.totalMon
            self.money.setText("Деньги: \n" + str(self.cash))
            self.startDev()

    def relise(self):  # метод для релиза игры
        self.table.setText('Релиз! \n  \nЗаработано за все дни: \n' +
                           str(self.totalPapers))
        self.table.adjustSize()
        self.timeDev = False
        self.timeToEnd = 5
        self.timeSale = True

    def startDev(self):  # метод для описания процесса разработки
        self.timeDev = True
        self.tick()
        self.timer.start()
        self.devPage2On = False
        self.devPage2.move(10000, 10000)
        self.table.setText('Дней до релиза: \n' + str(self.timeToEnd))
        self.table.adjustSize()

    def sale(self):  # метод для процесса продажи игры
        myltiply1 = 10 + self.platform + self.type
        if self.style in self.perfect[str(self.theme)][0]:
            myltiply2 = 2
        elif self.style in self.perfect[str(self.theme)][1]:
            myltiply2 = 1
        else:
            myltiply2 = 0.5
        a = int(
            randint(self.totalTechno * 10, self.totalTechno * 20) * myltiply2 /
            10 * myltiply1 + (self.fans * 10 + 1))
        if myltiply2 > 1:
            self.fans += a // 10
        elif myltiply2 < 1:
            self.fans -= a // 10
        self.totalPapers += a
        self.cash += a
        self.subs.setText('Фанаты: \n  ' + str(self.fans))
        self.money.setText('Деньги: \n   ' + str(self.cash))
        self.money.adjustSize()
        self.subs.adjustSize()
        self.table.setText('Заработано сегодня: \n' + str(a) +
                           '\nЗаработано за все дни: \n' +
                           str(self.totalPapers))
        self.table.adjustSize()
    def loadColorPanel(self):
        self.qsst.srctext = self.editor.text()
        self.qsst.loadVars()
        # item = self.colorGridLayout.itemAt(0)
        # while (item != None):
        #     self.colorGridLayout.removeItem(item)
        #     # self.colorGridLayout.removeWidget(item.widget())
        #     # item.widget().setParent(None)#这三行没有作用
        #     sip.delete(item.widget())  # 虽然控件删除了,但是grid的行数列数没减少,但是不影响使用
        #     sip.delete(item)
        #     item = self.colorGridLayout.itemAt(0)
        # self.colorGridLayout.update()  # 不起作用

        # a,b=list(self.clrBtnDict.keys()),list(self.qsst.varDict.keys());a.sort();b.sort()
        if sorted(list(self.clrBtnDict.keys())) != sorted(
                list(self.qsst.varDict.keys())):
            while self.colorPanelLayout.count() > 0:
                self.colorPanelLayout.removeItem(
                    self.colorPanelLayout.itemAt(0))
            self.clrBtnDict = {}
            labels = {}
            widLabel = 0
            widBtn = 0
            for varName, clrStr in self.qsst.varDict.items():
                label = QLabel(varName)  #, contianerWidget)
                btn = QPushButton(clrStr)  #, contianerWidget)
                if sys.platform.startswith("win"):
                    font1 = QFont("Arial", 10, QFont.Medium)
                    font2 = QFont("sans-serif", 9, QFont.Medium)
                    label.setFont(font1)
                    btn.setFont(font2)
                self.clrBtnDict[varName] = btn
                labels[varName] = label
                label.adjustSize()
                widLabel = label.width(
                ) if label.width() > widLabel else widLabel
                btn.adjustSize()
                widBtn = btn.width() if btn.width() > widBtn else widBtn
                #label.move(5, 5)
                #btn.move(100, 5)
                btn.clicked.connect(lambda x, var=varName: self.chclr(var))
            for name, btn in self.clrBtnDict.items():
                contianerWidget = QWidget()
                lay = QHBoxLayout()
                labels[name].setFixedWidth(widLabel)
                btn.setFixedWidth(widBtn)
                lay.addWidget(labels[name])
                lay.addWidget(btn)
                contianerWidget.setLayout(lay)
                #contianerWidget.setMinimumSize(QSize(185, 25))
                self.colorPanelLayout.addWidget(contianerWidget)

        for varName, btn in self.clrBtnDict.items():
            clrStr = self.qsst.varDict[varName]
            btn.setText(clrStr)
            if "rgb" in clrStr:
                t = clrStr.strip(r" rgba()")
                c = t.split(',')
                if len(c) > 3:
                    lable = c[3]
                else:
                    lable = 255
                color = QColor(c[0], c[1], c[2], lable)
            else:
                color = QColor(clrStr)
            s = ''
            if qGray(color.rgb()) < 100:
                s += "color:white;"
            else:
                s += "color:black;"

            btn.setStyleSheet(s + "background:" + btn.text())
Example #37
0
    class PythonTogether:
        
        def __init__(self,
                    win: QMainWindow,
                    winParent: QWidget,
                    open: QWidget) -> None:
            """
            Tous les utilitaires pour PTProject
            """

            self.win = win
            self.winParent = winParent
            self.open = open

            self.online = Online()

            self.winParent.setVisible(False)
            self.win.setWindowTitle("Python Together")

            self.a, self.b = 1280, 720
            self.x, self.y = center(self.a, self.b)
            self.win.setGeometry(self.x, self.y, self.a, self.b)
            self.win.show()

            self.label = QLabel(self.win)
            self.label.setText("Python Together 0.1")
            self.label.setFont(QFont('Mangal', 50))
            self.label.adjustSize()
            self.label.show()
            self.label.move(20,10)

            self.bouton1 = QPushButton(self.win)
            self.bouton1.setText("Revenir en arrière")
            self.bouton1.move(20, 100)
            self.bouton1.adjustSize()
            self.bouton1.clicked.connect(
                lambda: (self.winParent.setVisible(True), self.win.close()))
            self.bouton1.show()

            self.winEdit = QWidget(self.win)
            self.winEdit.setGeometry(0, 120, 1260, 600)
            self.winEdit.adjustSize()
            self.winEdit.show()
            self.layout = QVBoxLayout(self.winEdit)

            self.textEdit = QTextEdit()
            # self.text.move(20, 120)
            self.textEdit.setFont(QFont('Mangal', 15))
            self.textEdit.show()

            self.layout.addWidget(self.textEdit)
            self.winEdit.setLayout(self.layout)

            self.menuBar = QMenuBar(self.win)
            self.win.setMenuBar(self.menuBar)

            # Menu Bar
            self.fileMenu = QMenu("&Fichier", self.win)

            self.openAction = QAction("&Ouvrir", self.win)
            self.openAction.triggered.connect(self.openproject)
            self.openAction.setShortcut("Ctrl+O")

            self.saveAction = QAction("&Sauvegarder", self.win)
            self.saveAction.triggered.connect(self.saveFile)
            self.saveAction.setShortcut("Ctrl+S")

            self.saveOnlineAction = QAction("&Sauver en ligne", self.win)
            self.saveOnlineAction.triggered.connect(self.saveOnline)
            self.saveOnlineAction.setShortcut("Ctrl+Shift+S")

            self.loadOnlineAction = QAction("&Charger en ligne (Soon)", self.win)
            self.loadOnlineAction.triggered.connect(self.loadOnline)
            self.loadOnlineAction.setShortcut("Ctrl+Shift+O")

            self.fileMenu.addAction(self.openAction)
            self.fileMenu.addAction(self.saveAction)
            
            if Donnees.online:
                self.fileMenu.addAction(self.saveOnlineAction)
                self.fileMenu.addAction(self.loadOnlineAction)

            self.menuBar.addMenu(self.fileMenu)

        def openproject(self):

            self.open.setGeometry(50,50,200,200)
            self.open.setWindowTitle("Ouvrir")
            self.open.show()

            self.label11 = QLabel(self.open)
            self.label11.setText("Ouvrir fichier local\n(dans dossier ptprojects)")
            self.label11.move(20, 20)
            self.label11.show()

            self.champ = QLineEdit(self.open)
            self.champ.move(20, 60)
            self.champ.resize(160, 20)
            self.champ.show()

            self.bouton = QPushButton(self.open)
            self.bouton.setText("Ouvrir")
            self.bouton.move(20,90)
            self.bouton.clicked.connect(self.openFile)
            self.bouton.show()

        def openFile(self):
            try:
                with open("./module/ptprojects/"+self.champ.text(), "r") as f:
                    Donnees.ptfile = f.read()
                    Donnees.nameFileProject = self.champ.text()
                    self.label.setText(self.champ.text())
                    self.label.adjustSize()
                    self.textEdit.setText(Donnees.ptfile)
                    self.open.close()
            except:
                from traceback import print_exc
                print_exc()
                self.label11.setText("Impossible d'ouvrir")
        
        def saveFile(self):

            try:
                with open("./module/ptprojects/"+Donnees.nameFileProject, "w") as f:
                    f.write(self.textEdit.toPlainText())

            except:
                if Donnees.online:
                    a = f"{Donnees.current_user['user']}_python_{int(time.time())}.py"
                    with open(f"./module/ptprojects/{a}", "w") as f:
                        f.write(self.textEdit.toPlainText())
                        Donnees.nameFileProject = a
                        self.label.setText(a)
                        self.label.adjustSize()
                
                elif not Donnees.online:
                    a = f'python_{int(time.time())}.py'
                    with open(f"./module/ptprojects/{a}", "w") as f:
                        f.write(self.textEdit.toPlainText())
                        Donnees.nameFileProject = a
                        self.label.setText(a)
                        self.label.adjustSize()
        
        def saveOnline(self):
            self.online.uploadftp(Donnees.nameFileProject, "./module/ptprojects/")
            self.saveFile()
        
        def loadOnline(self):
            pass
Example #38
-16
	def __init__(self, parent):
		super().__init__(None,
				   Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint)
		self.setAttribute(Qt.WA_DeleteOnClose)
		main_layout = QVBoxLayout(self)
		self.parent_widget = parent
		self.url_inserter = QLineEdit()
		self.url_inserter.setPlaceholderText("Hover to see supported URLs")
		self.url_inserter.setToolTip(gui_constants.SUPPORTED_DOWNLOAD_URLS)
		self.url_inserter.setToolTipDuration(999999999)
		self.url_inserter.returnPressed.connect(self.add_download_entry)
		main_layout.addWidget(self.url_inserter)
		self.info_lbl = QLabel(self)
		self.info_lbl.setAlignment(Qt.AlignCenter)
		main_layout.addWidget(self.info_lbl)
		self.info_lbl.hide()
		buttons_layout = QHBoxLayout()
		clear_all_btn = QPushButton('Clear List')
		clear_all_btn.adjustSize()
		clear_all_btn.setFixedWidth(clear_all_btn.width())
		buttons_layout.addWidget(clear_all_btn, 0, Qt.AlignRight)
		main_layout.addLayout(buttons_layout)
		self.download_list = GalleryDownloaderList(parent.manga_list_view.sort_model, self)
		clear_all_btn.clicked.connect(self.download_list.clear_list)
		download_list_scroll = QScrollArea(self)
		download_list_scroll.setBackgroundRole(self.palette().Base)
		download_list_scroll.setWidgetResizable(True)
		download_list_scroll.setWidget(self.download_list)
		main_layout.addWidget(download_list_scroll, 1)
		close_button = QPushButton('Close', self)
		close_button.clicked.connect(self.hide)
		main_layout.addWidget(close_button)
		self.resize(480,600)
		self.setWindowIcon(QIcon(gui_constants.APP_ICO_PATH))