예제 #1
0
    def __set_text_edit_color(self, state, sender: QLineEdit):
        if state == QValidator.Acceptable:
            color = '#c4df9b'  # green
        else:
            color = QtCore.Qt.BackgroundRole

        sender.setStyleSheet('QLineEdit { background-color: %s }' % color)
예제 #2
0
class Borda(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.st = QStringListModel
        self.linha = QLineEdit()
        self.linha.setStyleSheet(self.configurarLinha())

    def configurarLinha(self):
        self.st = ("border-right: 10px solid blue;" +
                   "border-top: 10px solid blue;" +
                   "border-left: 10px solid blue;" +
                   "border-bottom: 10px solid blue;")
        return self.st
예제 #3
0
class InputLine(QWidget):
    
    HEIGHT = 30
    LABEL_WIDTH = 170
    INPUT_TEXT_WIDTH = 200
    BUTTON_WIDTH = 100
    BUTTON_BLOCK_X = 380
    ELEMENT_GAP = 5
    
    ERROR_WIDTH = 250
    ERROR_X = 595
    
    def __init__(self, parent):
        super().__init__(parent)
        self.initUI()
        
    def initUI(self):
                
        component_stylesheet = """
                                .QPushButton {
                                    font-weight: bold;
                                    font-size: 13px;
                                    background-color:#E0E0E0;
                                }
                                .QPushButton:pressed {
                                    background-color:#CCCCCC;
                                }
                                .QLabel {
                                    padding-top: 7px;
                                    font-weight: bold;
                                    font-size: 14px;
                                }
                                .QLineEdit {
                                    font-weight: bold;
                                    font-size: 14px;
                                }
                                .QLabel#error {
                                    color: red;
                                    font-size: 12px;
                                    font-style: italic;
                                    padding-top: 0px;
                                    padding-left: 6px;
                                }   
                            """       
               
        self.label = QLabel("", self)
        self.label.setStyleSheet(component_stylesheet)
        self.label.setAlignment(Qt.AlignRight)
        self.label.resize(InputLine.LABEL_WIDTH, InputLine.HEIGHT)
        self.label.move(0, 0)        
        
        self.text = QLineEdit(self)
        self.text.setStyleSheet(component_stylesheet)
        self.text.resize(InputLine.INPUT_TEXT_WIDTH, InputLine.HEIGHT)
        self.text.move(InputLine.LABEL_WIDTH + InputLine.ELEMENT_GAP, 0)
        
        self.ok = QPushButton("OK", self)
        self.ok.setStyleSheet(component_stylesheet)
        self.ok.resize(InputLine.BUTTON_WIDTH, InputLine.HEIGHT)
        self.ok.move(InputLine.BUTTON_BLOCK_X, 0)
        
        self.cancel = QPushButton("Cancel", self)
        self.cancel.setStyleSheet(component_stylesheet)
        self.cancel.resize(InputLine.BUTTON_WIDTH, InputLine.HEIGHT)
        self.cancel.move(InputLine.BUTTON_BLOCK_X + InputLine.BUTTON_WIDTH + InputLine.ELEMENT_GAP, 0)
    
        self.error = QLabel("", self)
        self.error.setObjectName("error")
        self.error.setStyleSheet(component_stylesheet)
        self.error.resize(InputLine.ERROR_WIDTH, InputLine.HEIGHT)
        self.error.move(InputLine.ERROR_X, 0)
    
    """ listeners which control what happens on ok an cancel button presses """
    def addOkListener(self, onOkEvent):
        self.ok.clicked.connect(onOkEvent)
    def addCancelListener(self, onCancelEvent):
        self.cancel.clicked.connect(onCancelEvent)
        
    """ utility methods of the widget """
    def getText(self):
        return self.text.text()
    def setText(self, text):
        self.text.setText(text)        
        
    def setLabelText(self, text):
        self.label.setText(text)
        
    def setErrorText(self, text):
        self.error.setText(text)
예제 #4
0
class Index(QWidget):
    show_mainindex_sg = pyqtSignal(int, str)
    show_register_sg = pyqtSignal()

    def __init__(self, parent=None):
        super(Index, self).__init__(parent)
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.h = self.screenRect.height()
        self.w = self.screenRect.width()
        self.xr = self.w / 930
        self.yr = self.h / 640
        self.zr = min(self.xr, self.yr)
        self.top_wi = QWidget(self)
        self.logo_la = QLabel(self.top_wi)
        self.ind_wi = QWidget(self)
        self.login_but = QPushButton(self.ind_wi)
        self.joke_but = QPushButton(self.ind_wi)
        self.register_but = QPushButton(self.ind_wi)
        self.imp_la = QLabel(self.ind_wi)
        self.account_le = QLineEdit(self.ind_wi)
        self.psw_le = QLineEdit(self.ind_wi)
        self.loading = QLabel(self)
        self.gif = QMovie('./resource/image/load.gif')
        self.set_ui()
        with open('index.qss', 'r') as f:
            self.setStyleSheet(f.read())

    def set_ui(self):
        self.setWindowTitle('Login')
        self.setObjectName('index')
        self.resize(self.w, self.h)
        self.top_wi.setObjectName('top')
        self.top_wi.resize(930 * self.xr, 95 * self.yr)
        self.logo_la.setObjectName('logo')
        self.logo_la.resize(65 * self.xr, 65 * self.zr)
        self.logo_la.move(29 * self.xr, 16 * self.yr)
        effect = QGraphicsDropShadowEffect()
        effect.setOffset(10, 10)
        effect.setColor(QColor(0, 0, 0, 80))
        effect.setBlurRadius(20)
        self.ind_wi.setObjectName('login')
        self.ind_wi.resize(327 * self.xr, 388 * self.yr)
        self.ind_wi.move(300 * self.xr, 150 * self.yr)
        self.ind_wi.setGraphicsEffect(effect)
        self.joke_but.setObjectName('joke')
        self.joke_but.resize(130 * self.xr, 30 * self.yr)
        self.joke_but.move(76 * self.xr, 234 * self.yr)
        self.joke_but.setFlat(True)
        self.joke_but.setText('忘记密码?我也没办法')
        self.login_but.setObjectName('button')
        self.login_but.move(64 * self.xr, 260 * self.yr)
        self.login_but.resize(202 * self.xr, 45 * self.yr)
        self.login_but.setText('登陆')
        self.login_but.clicked.connect(self.login)
        self.register_but.setObjectName('button')
        self.register_but.move(64 * self.xr, 315 * self.yr)
        self.register_but.resize(202 * self.xr, 45 * self.yr)
        self.register_but.setText('注册')
        self.register_but.clicked.connect(self.show_register)
        self.imp_la.setObjectName('imp_label')
        self.imp_la.resize(100 * self.zr, 100 * self.zr)
        self.imp_la.move(115 * self.xr + 100 * (self.xr - self.zr) / 2, 15 * self.yr)
        self.imp_la.setStyleSheet('border-radius:{}px;'.format(self.zr * 49))
        self.account_le.setObjectName('input')
        self.account_le.setTextMargins(20, 0, 0, 0)
        self.account_le.resize(213 * self.xr, 45 * self.yr)
        self.account_le.move(59 * self.xr, 126 * self.yr)
        self.account_le.setPlaceholderText('账号')
        self.psw_le.setObjectName('input')
        self.psw_le.setTextMargins(20, 0, 0, 0)
        self.psw_le.resize(213 * self.xr, 45 * self.yr)
        self.psw_le.move(59 * self.xr, 181 * self.yr)
        self.psw_le.setPlaceholderText('密码')
        self.psw_le.setEchoMode(QLineEdit.Password)
        self.loading.setObjectName('load')
        self.loading.resize(self.xr * 150, self.yr * 150)
        self.loading.move(self.xr * 760, self.yr * 500)
        self.loading.setScaledContents(True)
        self.loading.setMovie(self.gif)
        self.gif.start()
        self.ind_wi.setStyleSheet('#input{border-radius:' + str(self.zr * 20) + 'px;}' + '#button{border-radius:' + str(
            self.zr * 20) + 'px;' + 'font-size:' + str(int(self.zr * 18)) + 'px;}')

    def login(self):
        account_p = self.account_le.text()
        psw_p = self.psw_le.text()
        dic = login(account_p, psw_p)
        if dic['status'] == 0:
            self.show_mainindex_sg.emit(dic['data']['user_id'], dic['data']['token'])
        elif dic['status'] == 1:
            self.account_le.clear()
            self.psw_le.clear()
            self.account_le.setStyleSheet('border:4px solid;border-color:red;')
            self.account_le.setPlaceholderText('网络超时')
        else:
            self.account_le.clear()
            self.psw_le.clear()
            self.account_le.setStyleSheet('border:4px solid;border-color:red;')
            self.account_le.setPlaceholderText('账号不存在或密码错误')

    def show_register(self):
        self.show_register_sg.emit()
예제 #5
0
class Search(QWidget):
    search_sg = pyqtSignal(dict)
    back_sg = pyqtSignal()

    def __init__(self, parent=None):
        super(Search, self).__init__(parent)
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.h = self.screenRect.height()
        self.w = self.screenRect.width()
        self.xr = self.w / 930
        self.yr = self.h / 640
        self.zr = min(self.xr, self.yr)
        self.token = ''
        self.head = QLabel(self)
        self.search = QLineEdit(self)
        self.butt = QPushButton(self)
        self.but = QPushButton(self)
        self.set_ui()

    def set_ui(self):
        self.search.setObjectName('search')
        self.search.resize(self.xr * 520, self.yr * 40)
        self.search.move(self.xr * 205, self.yr * 300)
        self.search.setPlaceholderText('请输入战局ID')
        self.search.setTextMargins(20, 0, 0, 0)
        self.search.setStyleSheet('font-size:{}px;border-radius:{}px;'.format(int(self.zr * 16), self.zr * 15))
        self.head.setObjectName('head')
        self.head.resize(self.xr * 200, self.yr * 50)
        self.head.move(self.xr * 360, self.yr * 240)
        self.head.setText('搜索战局')
        self.head.setAlignment(Qt.AlignCenter)
        self.head.setStyleSheet('font-size:{}px;'.format(int(self.zr * 25)))
        self.but.setObjectName('button')
        self.but.resize(self.xr * 130, self.yr * 40)
        self.but.move(self.xr * 480, self.yr * 380)
        self.but.setText('返回')
        self.but.clicked.connect(self.back_for)
        self.butt.setObjectName('button')
        self.butt.resize(self.xr * 130, self.yr * 40)
        self.butt.move(self.xr * 320, self.yr * 380)
        self.butt.setText('搜索')
        self.butt.clicked.connect(self.search_for)
        self.setStyleSheet('#button{font-size:' + str(int(self.zr * 18)) + 'px;border-radius:' + str(
            self.zr * 15) + 'px;background-color:#333643;color:#ffffff;}#button:hover{background-color:#575B6E;}#button:pressed{background-color:#202129;}')

    def search_for(self):
        id_p = self.search.text()
        self.search.clear()
        dic = find_info(id_p, self.token)
        # print(dic)
        if dic['status'] == 0:
            self.search_sg.emit(dic)
        else:
            self.search.setStyleSheet(
                'font-size:{}px;border-radius:{}px;border:4px solid;border-color:red'.format(int(self.zr * 16),
                                                                                             self.zr * 15))
            self.search.clear()
            self.search.setPlaceholderText('ID不存在')

    def back_for(self):
        self.back_sg.emit()

    def get_token(self, t):
        self.token = t
예제 #6
0
class PackageWidget(QWidget):
    def __init__(self, main, channels):
        super(PackageWidget, self).__init__()
        self.setObjectName("PackageWidget")
        self.main_win = main
        self.game = self.main_win.games[self.main_win.game_index]
        self.channels = channels
        self.check_boxs = []
        self.indexs = []
        self.lbps = {}
        self.progress = None
        self.monitor = PackageMonitor()
        self.monitor.signal.connect(self.complete)

        v_layout = QVBoxLayout()
        h_layout1 = QHBoxLayout()
        cbox_widget = QWidget()
        v_layout1 = QVBoxLayout()
        self.all_selected_cbox = QCheckBox("全  选")
        self.all_selected_cbox.stateChanged.connect(self.select_all)
        v_layout1.addWidget(self.all_selected_cbox)
        for channel in self.channels:
            check_box = QCheckBox(channel['channelId'])
            check_box.setFixedWidth(100)
            v_layout1.addSpacing(10)
            v_layout1.addWidget(check_box)
            self.check_boxs.append(check_box)
        cbox_widget.setLayout(v_layout1)
        channel_list_area = QScrollArea()
        channel_list_area.setWidget(cbox_widget)
        h_layout1.addWidget(channel_list_area, 1)

        self.qpb_list_widget = QListWidget()
        self.qpb_list_widget.setSelectionMode(
            QAbstractItemView.SingleSelection)
        self.qpb_list_widget.itemDoubleClicked.connect(self.select_list)
        h_layout1.addWidget(self.qpb_list_widget, 5)
        v_layout.addLayout(h_layout1)

        h_layout2 = QHBoxLayout()
        self.back_btn = QPushButton("返 回")
        self.back_btn.setFixedWidth(100)
        self.back_btn.clicked.connect(self.back)
        h_layout2.addWidget(self.back_btn,
                            alignment=Qt.AlignLeft | Qt.AlignBottom)

        h_layout2.addSpacing(100)
        select_apk_btn = QPushButton("选择母包:")
        select_apk_btn.clicked.connect(self.select_apk)
        h_layout2.addWidget(select_apk_btn)
        self.apk_path = QLineEdit()
        self.apk_path.setPlaceholderText("母包路径")
        h_layout2.addWidget(self.apk_path)
        h_layout2.addSpacing(100)

        self.pack_btn = QPushButton("打 包")
        self.pack_btn.setFixedWidth(100)
        self.pack_btn.clicked.connect(self.click)
        h_layout2.addWidget(self.pack_btn,
                            alignment=Qt.AlignRight | Qt.AlignBottom)

        v_layout.addLayout(h_layout2)
        self.setLayout(v_layout)

    def select_list(self):
        index = self.qpb_list_widget.currentIndex().row()
        channel_id = self.channels[self.indexs[index]]['channelId']
        success = self.lbps[channel_id]['success']
        dest_apk_dir = Utils.get_full_path('output/' + self.game['id'] + '/' +
                                           channel_id)
        if success:
            os.startfile(dest_apk_dir)
        else:
            QMessageBox.warning(self, "警告", "打包成功了吗?")

    def back(self):
        self.monitor.deleteLater()
        self.main_win.set_channel_list_widget(self.channels)

    def select_apk(self):
        fname = QFileDialog.getOpenFileName(
            self, '选择母包', os.path.join(os.path.expanduser('~'), "Desktop"),
            ("Apk (*.apk)"))
        if fname[0]:
            self.apk_path.setStyleSheet("font-size:12px")
            self.apk_path.setText(fname[0])

    def select_all(self):
        if self.all_selected_cbox.isChecked():
            for cbox in self.check_boxs:
                cbox.setChecked(True)
        else:
            for cbox in self.check_boxs:
                cbox.setChecked(False)

    def click(self):
        if self.pack_btn.text() == "打 包":
            self.package()
        elif self.pack_btn.text() == "取 消":
            self.cancel()

    def package(self):
        # 清空上次打包完成后的进度条显示列表
        count = self.qpb_list_widget.count()
        if count > 0:
            for i in range(count):
                item = self.qpb_list_widget.takeItem(0)
                del item

        self.indexs = []
        for i in range(len(self.channels)):
            if self.check_boxs[i].isChecked():
                self.indexs.append(i)
        if len(self.indexs) <= 0:
            QMessageBox.warning(self, "警告", "请选择需要打包的渠道!")
            return

        if self.apk_path.text().strip() == "":
            QMessageBox.warning(self, "警告", "请上传母包!")
            return

        apk = self.apk_path.text().strip().replace('\\', '/')
        for i in self.indexs:
            lbp = {}
            lbp['success'] = False
            self.set_qpb_list_item(self.channels[i], lbp)
            runnable = PackRunnable(self.game, self.channels[i], apk)
            runnable.signal.signal.connect(self.set_value)
            self.monitor.add_runnable(runnable)
            lbp['runnable'] = runnable
            self.lbps[self.channels[i]['channelId']] = lbp
        # 开启监听线程
        self.monitor.start()
        # 开始打包,不可返回,返回按钮禁用;设置打包按钮文本为"取 消"
        self.back_btn.setDisabled(True)
        self.pack_btn.setText("取 消")

    def set_qpb_list_item(self, channel, lbp):
        item = QListWidgetItem(self.qpb_list_widget)
        item.setSizeHint(QSize(400, 80))
        widget = QWidget(self.qpb_list_widget)
        v_layout = QVBoxLayout()
        label = QLabel(channel['channelId'] + "==>>>等待出包...")
        v_layout.addWidget(label)
        lbp['label'] = label
        qpb = QProgressBar(self.qpb_list_widget)
        v_layout.addWidget(qpb)
        lbp['qpb'] = qpb
        widget.setLayout(v_layout)
        self.qpb_list_widget.addItem(item)
        self.qpb_list_widget.setItemWidget(item, widget)

    def set_value(self, channel_id, result, msg, step):
        lbp = self.lbps[channel_id]
        if result:  # 打包步骤异常,提示异常,关闭进度条
            lbp['label'].setText(channel_id + "==>>>" + msg)
            lbp['qpb'].close()
            if step == 100:
                lbp['success'] = True
                self.lbps[channel_id] = lbp
        else:  # 打包正常,设置进度条进度
            lbp['qpb'].setValue(step)
            if step == 0:
                lbp['label'].setText(channel_id + "==>>>" + msg)

    # 取消打包(全部取消)
    def cancel(self):
        self.progress = QProgressDialog(self)
        self.progress.setFixedWidth(500)
        self.progress.setFixedHeight(80)
        self.progress.setWindowTitle("正在取消,请稍等...")
        self.progress.setCancelButtonText("取消")
        self.progress.setMinimumDuration(1)
        self.progress.setWindowModality(Qt.ApplicationModal)
        self.progress.setRange(0, 0)
        self.progress.show()
        # 清空进度条显示列表
        count = self.qpb_list_widget.count()
        for i in range(count):
            item = self.qpb_list_widget.takeItem(0)
            del item

        # 清空任务线程池;线程池清空后,会触发监听线程的完成信号,重置返回和打包按钮
        # 因为打包任务调用外部程序,并不能立即终止外部程序连接,所以清空过程有延迟
        for channel_id in self.lbps:
            self.lbps[channel_id]['runnable'].is_close = True
        self.monitor.clear()

    # 取消打包(清空任务完成),或打包完成,
    def complete(self):
        if self.progress is not None:
            self.progress.cancel()
        # 清空复选框的选择
        self.all_selected_cbox.setChecked(False)
        for cbox in self.check_boxs:
            cbox.setChecked(False)
        # 返回按钮解禁;设置打包按钮文本为"打 包"
        self.back_btn.setDisabled(False)
        self.pack_btn.setText("打 包")
class StickmanToolsPanel(QFrame):
    
    WIDTH = 1100
    HEIGHT = 45
    
    FRAME_SIZE_X = 180
    FRAME_WIDTH = 1
    FRAME_MARGIN = 2
    
    ICON_SIZE = 35
    ICON_BUTTON_WIDTH = 60
    INPUT_TEXT_WIDTH = 300
    INPUT_START_X = 213
    SAY_BLOCK_X = 520
    PHOTO_BUTTON_WIDTH = 240
    PHOTO_BUTTON_X = 858
    
    def __init__(self, parent, tools):
        super().__init__(parent)
        self.tools = tools
        self.initUI()
        
    def initUI(self):
        self.resize(StickmanToolsPanel.WIDTH, StickmanToolsPanel.HEIGHT + StickmanToolsPanel.FRAME_MARGIN*2)
        self.setFrameStyle(QFrame.StyledPanel)
        self.setFrameRect(QRect(0, 0, StickmanToolsPanel.FRAME_SIZE_X + StickmanToolsPanel.FRAME_MARGIN*2, StickmanToolsPanel.HEIGHT + StickmanToolsPanel.FRAME_MARGIN*2))
        self.setLineWidth(StickmanToolsPanel.FRAME_WIDTH)
        
        component_stylesheet = """
                                .QPushButton {
                                    font-weight: bold;
                                    font-size: 13px;
                                    background-color:#E0E0E0;
                                }
                                .QPushButton:pressed {
                                    background-color:#CCCCCC;
                                }
                                .QLineEdit {
                                    font-weight: bold;
                                    font-size: 24px;
                                }  
                            """
                        
        self.smile_button = QPushButton('', self)
        self.smile_button.setIcon(assets.smile)
        self.smile_button.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.smile_button.resize(StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.smile_button.move(StickmanToolsPanel.FRAME_MARGIN, StickmanToolsPanel.FRAME_MARGIN)        
        self.smile_button.setStyleSheet(component_stylesheet)
        self.smile_button.clicked.connect(self.changeExpression)
        self.smile_button.show()        

        self.sad_button = QPushButton('', self)
        self.sad_button.setIcon(assets.sad)
        self.sad_button.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.sad_button.resize(StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.sad_button.move(StickmanToolsPanel.FRAME_MARGIN + StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.FRAME_MARGIN)        
        self.sad_button.setStyleSheet(component_stylesheet)
        self.sad_button.clicked.connect(self.changeExpression)
        self.sad_button.show() 
        
        self.confused_button = QPushButton('', self)
        self.confused_button.setIcon(assets.confused)
        self.confused_button.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.confused_button.resize(StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.confused_button.move(StickmanToolsPanel.FRAME_MARGIN + StickmanToolsPanel.ICON_BUTTON_WIDTH*2, StickmanToolsPanel.FRAME_MARGIN)        
        self.confused_button.setStyleSheet(component_stylesheet)
        self.confused_button.clicked.connect(self.changeExpression)
        self.confused_button.show() 
        
        self.say_text = QLineEdit(self)
        self.say_text.setStyleSheet(component_stylesheet)
        self.say_text.resize(StickmanToolsPanel.INPUT_TEXT_WIDTH, StickmanToolsPanel.HEIGHT)
        self.say_text.move(StickmanToolsPanel.FRAME_MARGIN + StickmanToolsPanel.INPUT_START_X, StickmanToolsPanel.FRAME_MARGIN)
        
        self.say_left = QPushButton('', self)
        self.say_left.setIcon(assets.say_left)
        self.say_left.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.say_left.resize(StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.say_left.move(StickmanToolsPanel.SAY_BLOCK_X, StickmanToolsPanel.FRAME_MARGIN)        
        self.say_left.setStyleSheet(component_stylesheet)
        self.say_left.clicked.connect(self.sayLeft)
        
        self.say_right = QPushButton('', self)
        self.say_right.setIcon(assets.say_right)
        self.say_right.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.say_right.resize(StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.say_right.move(StickmanToolsPanel.SAY_BLOCK_X + StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.FRAME_MARGIN)   
        self.say_right.setStyleSheet(component_stylesheet)
        self.say_right.clicked.connect(self.sayRight)
        
        self.say_exit = QPushButton('', self)
        self.say_exit.setIcon(assets.exit)
        self.say_exit.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.say_exit.resize(StickmanToolsPanel.ICON_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.say_exit.move(StickmanToolsPanel.SAY_BLOCK_X + StickmanToolsPanel.ICON_BUTTON_WIDTH*2, StickmanToolsPanel.FRAME_MARGIN)   
        self.say_exit.setStyleSheet(component_stylesheet)
        self.say_exit.clicked.connect(self.sayClear)
        
        self.photo = QPushButton('', self)
        self.photo.setIcon(assets.camera)
        self.photo.setIconSize(QSize(StickmanToolsPanel.ICON_SIZE, StickmanToolsPanel.ICON_SIZE))
        self.photo.resize(StickmanToolsPanel.PHOTO_BUTTON_WIDTH, StickmanToolsPanel.HEIGHT)
        self.photo.move(StickmanToolsPanel.PHOTO_BUTTON_X, StickmanToolsPanel.FRAME_MARGIN)
        self.photo.setStyleSheet(component_stylesheet)
        self.photo.clicked.connect(self.makePhoto)
        
    def sayLeft(self):
        search = getWorld().getActive()
        if search != None:
            search.sayLeft(self.say_text.text())
        self.say_text.setText("")
    def sayRight(self):
        search = getWorld().getActive()
        if search != None:
            search.sayRight(self.say_text.text())
        self.say_text.setText("")
    def sayClear(self):
        search = getWorld().getActive()
        if search != None:
            search.sayRemove()
        self.say_text.setText("")
    
    def changeExpression(self):
        search = getWorld().getActive()
        if search != None:
            if self.sender() == self.smile_button:
                search.setHappy()
            elif self.sender() == self.sad_button:
                search.setSad()
            else:
                search.setConfused()
    
    def makePhoto(self):
        self.tools.framemenu.addNewFrame(getWorld().getFrame())
예제 #8
0
class FirstRunWiz(QWizard):
    def __init__(self, app_settings):
        QWizard.__init__(self)
        self.app_settings = app_settings
        layout = [
            QWizard.Stretch, QWizard.BackButton, QWizard.NextButton,
            QWizard.FinishButton, QWizard.CancelButton
        ]
        self.setButtonLayout(layout)
        self.setOptions(self.NoBackButtonOnStartPage)

        if getattr(sys, 'frozen', False):
            self.dir_path = os.path.dirname(sys.executable)
        else:
            self.dir_path = os.path.dirname(os.path.realpath(__file__))

        self.setWizardStyle(QWizard.ModernStyle)
        self.setWindowTitle("MQT First Run Wizard")
        self.setPixmap(QWizard.WatermarkPixmap,
                       QPixmap(os.path.join(self.dir_path, "watermark.png")))

        self.first_name = ''
        self.surname = ''
        self.email = ''
        self.first_name_edit = None
        self.surname_edit = None
        self.email_edit = None

        self.server_address = ''
        self.class_key = ''
        self.ssl_checkbox = None
        self.server_address_edit = None
        self.class_key_edit = None

        self.setPage(1, self.intro())
        self.setPage(2, self.user_info())
        self.setPage(3, self.server_details())
        self.setPage(4, self.complete())

        self.setStartId(1)

    @staticmethod
    def intro():
        page = QWizardPage()
        page.setTitle("Welcome to My Query Tutor")
        page.setSubTitle("The best tool to learn SQL")
        welcome_label = QLabel('''
I can see that this is the first time
you have run My Query Tutor.

We will now set everything up and you
won't have to see this again :-D
''')
        description_label = QLabel('')

        layout = QGridLayout(page)
        layout.addWidget(welcome_label)
        layout.addWidget(description_label)

        return page

    def server_details(self):
        page = QWizardPage()
        page.setTitle("Server Details")
        page.setSubTitle("Optional server details (for syncing progress)")
        layout = QGridLayout(page)
        server_address_label = QLabel("Server Address    ")
        self.server_address_edit = QLineEdit()
        class_key_label = QLabel("Class Key         ")
        self.class_key_edit = QLineEdit()
        ssl_label = QLabel("SSL               ")
        self.ssl_checkbox = QCheckBox()

        layout.addWidget(server_address_label, 1, 0)
        layout.addWidget(self.server_address_edit, 1, 1)
        layout.addWidget(class_key_label, 2, 0)
        layout.addWidget(self.class_key_edit, 2, 1)
        layout.addWidget(ssl_label, 3, 0)
        layout.addWidget(self.ssl_checkbox, 3, 1)

        return page

    def user_info(self):
        page = QWizardPage()
        page.setTitle("Your details")
        page.setSubTitle("Complete the form and click next")
        layout = QGridLayout(page)
        first_name_label = QLabel("First Name      ")
        self.first_name_edit = QLineEdit()
        self.first_name_edit.setStyleSheet(
            "QLineEdit { background-color : white; color : black; }")
        surname_label = QLabel("Surname         ")
        self.surname_edit = QLineEdit()
        self.surname_edit.setStyleSheet(
            "QLineEdit { background-color : white; color : black; }")
        email_label = QLabel("Email Address   ")
        self.email_edit = QLineEdit()
        self.email_edit.setStyleSheet(
            "QLineEdit { background-color : white; color : black; }")

        layout.addWidget(first_name_label, 1, 0)
        layout.addWidget(self.first_name_edit, 1, 1)
        layout.addWidget(surname_label, 2, 0)
        layout.addWidget(self.surname_edit, 2, 1)
        layout.addWidget(email_label, 3, 0)
        layout.addWidget(self.email_edit, 3, 1)

        return page

    @staticmethod
    def complete():
        page = QWizardPage()
        page.setTitle("Settings Complete")
        page.setSubTitle("All Done! (That was easy, wasn't it?)")

        label = QLabel("Click finish and start MQT")
        label.setWordWrap(True)

        layout = QGridLayout(page)
        layout.addWidget(label)

        return page

    def nextId(self):
        current_id = self.currentId()
        if current_id == 1:
            return 2
        elif current_id == 2:
            return 3
        elif current_id == 3:
            return 4
        else:
            return -1

    def validateCurrentPage(self) -> bool:
        current_id = self.currentId()
        all_goods = True
        if current_id == 2:
            if self.check_name_entry():
                self.app_settings.set_user_details(self.first_name,
                                                   self.surname, self.email)
                self.make_local_database()
            else:
                all_goods = False
        if current_id == 3:
            if self.ssl_checkbox.isChecked():
                ssl = 'true'
            else:
                ssl = 'false'
            self.app_settings.set_server_details(
                self.server_address_edit.text(), self.class_key_edit.text(),
                "", ssl)

        return all_goods

    def check_name_entry(self):
        correct_style = "QLineEdit { background-color : white; color : black; }"
        incorrect_style = "QLineEdit { background-color : yellow; color : black; }"
        all_cool = True

        self.first_name = self.first_name_edit.text()
        self.surname = self.surname_edit.text()
        self.email = self.email_edit.text()

        if len(self.first_name) == 0:
            self.first_name_edit.setStyleSheet(incorrect_style)
            all_cool = False
        else:
            self.first_name_edit.setStyleSheet(correct_style)

        if len(self.surname) == 0:
            self.surname_edit.setStyleSheet(incorrect_style)
            all_cool = False
        else:
            self.surname_edit.setStyleSheet(correct_style)

        if re.match('''(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)''',
                    self.email):
            self.email_edit.setStyleSheet(correct_style)
        else:
            self.email_edit.setStyleSheet(incorrect_style)
            all_cool = False

        return all_cool

    def make_local_database(self):
        src_db_file = os.path.join(self.dir_path, 'MQT_APP.sqlite')
        dir_path = QStandardPaths.writableLocation(
            QStandardPaths.AppLocalDataLocation)
        file_name = os.path.join(dir_path, 'MQT_APP.sqlite')
        shutil.copy(src_db_file, file_name)

        src_db_file = os.path.join(self.dir_path, 'MQT_EX.sqlite')
        dir_path = QStandardPaths.writableLocation(
            QStandardPaths.AppLocalDataLocation)
        file_name = os.path.join(dir_path, 'MQT_EX.sqlite')
        shutil.copy(src_db_file, file_name)

        src_dir = os.path.join(self.dir_path, 'images')
        dst_dir = os.path.join(dir_path, 'images')
        shutil.copytree(src_dir, dst_dir)
예제 #9
0
class Register(QWidget):
    register_ok_sg = pyqtSignal()

    def __init__(self, parent=None):
        super(Register, self).__init__(parent)
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.h = self.screenRect.height()
        self.w = self.screenRect.width()
        self.xr = self.w / 930
        self.yr = self.h / 640
        self.zr = min(self.xr, self.yr)
        self.top_wi = QWidget(self)
        self.logo_la = QLabel(self.top_wi)
        self.ind_wi = QWidget(self)
        self.register_but = QPushButton(self.ind_wi)
        self.imp_la = QLabel(self.ind_wi)
        self.account_le = QLineEdit(self.ind_wi)
        self.psw_le = QLineEdit(self.ind_wi)
        self.name_le = QLineEdit(self.ind_wi)
        self.set_ui()
        with open('index.qss', 'r') as f:
            self.setStyleSheet(f.read())

    def set_ui(self):
        self.setWindowTitle('Register')
        self.setObjectName('register')
        self.resize(self.w, self.h)
        self.top_wi.setObjectName('top')
        self.top_wi.resize(930 * self.xr, 95 * self.yr)
        self.logo_la.setObjectName('logo')
        self.logo_la.resize(65 * self.xr, 65 * self.zr)
        self.logo_la.move(29 * self.xr, 16 * self.yr)
        effect = QGraphicsDropShadowEffect()
        effect.setOffset(10, 10)
        effect.setColor(QColor(0, 0, 0, 80))
        effect.setBlurRadius(20)
        self.ind_wi.setObjectName('login')
        self.ind_wi.resize(327 * self.xr, 388 * self.yr)
        self.ind_wi.move(300 * self.xr, 150 * self.yr)
        self.ind_wi.setGraphicsEffect(effect)
        self.register_but.setObjectName('button')
        self.register_but.move(64 * self.xr, 315 * self.yr)
        self.register_but.resize(202 * self.xr, 45 * self.yr)
        self.register_but.setText('注册新用户')
        self.register_but.clicked.connect(self.register)
        self.imp_la.setObjectName('imp_label')
        self.imp_la.resize(100 * self.zr, 100 * self.zr)
        self.imp_la.move(115 * self.xr + 100 * (self.xr - self.zr) / 2,
                         15 * self.yr)
        self.imp_la.setStyleSheet('border-radius:{}px;'.format(self.zr * 49))
        self.account_le.setObjectName('input')
        self.account_le.setTextMargins(20, 0, 0, 0)
        self.account_le.resize(213 * self.xr, 45 * self.yr)
        self.account_le.move(59 * self.xr, 126 * self.yr)
        self.account_le.setPlaceholderText('账号')
        self.psw_le.setObjectName('input')
        self.psw_le.setTextMargins(20, 0, 0, 0)
        self.psw_le.resize(213 * self.xr, 45 * self.yr)
        self.psw_le.move(59 * self.xr, 181 * self.yr)
        self.psw_le.setPlaceholderText('密码')
        self.psw_le.setEchoMode(QLineEdit.Password)
        self.name_le.setObjectName('input')
        self.name_le.setTextMargins(20, 0, 0, 0)
        self.name_le.resize(213 * self.xr, 45 * self.yr)
        self.name_le.move(59 * self.xr, 236 * self.yr)
        self.name_le.setPlaceholderText('昵称')
        self.ind_wi.setStyleSheet('#input{border-radius:' + str(self.zr * 20) +
                                  'px;}' + '#button{border-radius:' +
                                  str(self.zr * 20) + 'px;' + 'font-size:' +
                                  str(int(self.zr * 18)) + 'px;}')

    def register(self):
        account_p = self.account_le.text()
        psw_p = self.psw_le.text()
        # name_p = self.name_le.text()
        dic = register(account_p, psw_p)
        if dic['status'] == 1001:
            self.account_le.clear()
            self.psw_le.clear()
            self.account_le.setStyleSheet('border:4px solid;border-color:red;')
            self.account_le.setPlaceholderText('账号已存在')
        elif dic['status'] == 0:
            self.register_ok_sg.emit()
        else:
            self.account_le.clear()
            self.psw_le.clear()
            self.account_le.setStyleSheet('border:4px solid;border-color:red;')
            self.account_le.setPlaceholderText('未知错误')