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)
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()
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)
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)
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)
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)
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()
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)
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)
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)
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()
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): 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))
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
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()
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))
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)
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')
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
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()
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('вы проиграли')
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()
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
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)
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)
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)
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)
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()
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;}")
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()
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()
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())
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
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))