Esempio n. 1
0
class LoginForm(QtGui.QMainWindow):
  def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, parent)
    self.ui = Ui_Form()
    self.ui.setupUi(self)
    if os.path.exists('.fullscreen'):
      self.showFullScreen()
    QtCore.QObject.connect(self.ui.txtCode, QtCore.SIGNAL("returnPressed()"), self.check_code)

  def read_codes(self):
    try:
      with open('codes') as f:
        lines = f.read().splitlines()
    except:
      lines = ["error"]
    return lines

  def check_code(self):
    code = self.ui.txtCode.text()
    validcodes = self.read_codes()
    if "error" in validcodes:
      self.ui.lblStatus.setText("An error occured reading codes")
    elif code in validcodes:
      self.ui.lblStatus.setText("Code accepted")
      self.mainform = MainForm()
      self.mainform.show()
      self.hide()
    else:
      self.ui.lblStatus.setText("Code invalid")
    self.ui.txtCode.setText("")
class Login(QtGui.QWidget):
    def __init__(self):
        super(Login, self).__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.escuchador()
        self.show()

#respuestas al hacer click sobre los botones
    def escuchador(self):
        self.ui.user_in.clicked.connect(self.aceptado)
        self.ui.user_out.clicked.connect(self.cerrar)

#mostrar ventana principal
    def ventana_principal(self):
        form = carga_Productos.Bd_Productos()
        form.exec_()

#funcion para verificar identidad del usuario
    def aceptado(self):
        clave = self.ui.line_pass.text()
        usuario = self.ui.line_user.text()
        clave_bd = metodos_login.obt_clave(usuario)
        usuario_bd = metodos_login.obt_usuario(clave)
        if clave or usuario:
            try:
                for i in clave_bd:
                    c = clave_bd["password"]
            except:
                self.error_usuario()
            for i in usuario_bd:
                u = usuario_bd["user"]
        else:
            self.error_usuario()
        if clave == c and usuario == u:
            self.cerrar()
            self.ventana_principal()
        else:
            self.error_usuario()

    def error_usuario(self):
        self.ui.m_error = QtGui.QMessageBox()
        self.ui.m_error.setWindowTitle(" Error ")
        self.ui.m_error.setText("Error de Usuario y/o Clave")
        self.ui.m_error.setDefaultButton(QtGui.QMessageBox.Ok)
        self.ui.m_error.exec_()

    def cerrar(self):
        self.close()
Esempio n. 3
0
 def __init__(self, parent=None):
   QtGui.QWidget.__init__(self, parent)
   self.ui = Ui_Form()
   self.ui.setupUi(self)
   if os.path.exists('.fullscreen'):
     self.showFullScreen()
   QtCore.QObject.connect(self.ui.txtCode, QtCore.SIGNAL("returnPressed()"), self.check_code)
Esempio n. 4
0
 def __init__(self):
     Ui_Form.__init__(self)
     self.qwidget = QWidget()
     self.setupUi(self.qwidget)
     self.qwidget.setWindowTitle("欢迎")
     self.Button_login.clicked.connect(self.login)
class MyUi(QMainWindow):
    def __init__(self):
        super(MyUi, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        cwd = os.getcwd()
        cwd = str(cwd)
        if os.path.isfile(cwd + "/time"):
            with open("time", "r") as outfile:  #reads current time
                history = cPickle.load(outfile)
            if (datetime.now() - history
                ).total_seconds() < 43200:  #measures if time elapse>12 hours
                print("Less than 12 hours. Loading previously saved Pickle...")
                #with open("time","w") as infile: #update time
                #cPickle.dump(datetime.now(),infile)
                #            else:
                print("More than 12 hours. Updating Pickle...")
                data = ts.get_industry_classified()
                with open("class", "w+") as outfile:
                    cPickle.dump(data, outfile)
                now = datetime.now()
                with open("time", "w+") as outfile:  #update time
                    cPickle.dump(now, outfile)

        else:
            print("No Pickle found!"
                  )  #If this is first time using tuchart in this directory
            data = df()
            data = ts.get_industry_classified()
            with open('class', 'w+') as outfile:  #records pickle
                cPickle.dump(data, outfile)
            now = datetime.now()
            with open("time", "w+") as outfile:
                cPickle.dump(now, outfile)

        with open("class", "r") as infile:  # reads current time
            series = cPickle.load(infile)
        #series = pd.read_json(cwd + "\\class.json")
        #series = ts.get_industry_classified()
        series = pd.DataFrame(series)

        curdate = time.strftime(
            "%Y/%m/%d")  # gets current time to put into dateedit
        curdateQ = QDate.fromString(curdate, "yyyy/MM/dd")

        dateobj = datetime.strptime(curdate,
                                    "%Y/%m/%d")  #converts to datetime object

        past = dateobj - timedelta(days=7)  #minus a week to start date
        pasttime = datetime.strftime(past, "%Y/%m/%d")
        pastQ = QDate.fromString(
            pasttime,
            "yyyy/MM/dd")  #convert to qtime so that widget accepts the values

        pastL = dateobj - timedelta(days=30)  # minus a month to start date
        pasttimeL = datetime.strftime(pastL, "%Y/%m/%d")
        pastQL = QDate.fromString(pasttimeL, "yyyy/MM/dd")

        np_indexes = np.array([['sh', '上证指数', '大盘指数'], ['sz', '深证成指', '大盘指数'],
                               ['hs300', '沪深300指数', '大盘指数'],
                               ['sz50', '上证50', '大盘指数'],
                               ['zxb', '中小板', '大盘指数'], ['cyb', '创业板', '大盘指数']])
        indexes = df(data=np_indexes,
                     index=range(5000, 5006),
                     columns=["code", "name", "c_name"])
        series = indexes.append(series)
        list1_bfr = series["c_name"].tolist(
        )  #Get industry categories. Filters out redundant ones
        list1 = list(set(list1_bfr))
        list1.sort(key=list1_bfr.index)
        #w = database()
        #zsparent = QTreeWidgetItem(self.ui.treeWidget)
        #zsparent.setText(0,"股票指数")
        #zsnames =["上证指数-sh","深圳成指-sz","沪深300指数-hs300","上证50-"]

        self.init_treeWidget(list1, series)

        self.ui.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.ui.treeWidget.customContextMenuRequested.connect(self.openMenu)

        #self.ui.webView.setGeometry(QtCore.QRect(0, 30,1550, 861))
        file_path = os.path.abspath(
            os.path.join(os.path.dirname(__file__),
                         "render.html"))  #path to read html file
        local_url = QUrl.fromLocalFile(file_path)
        self.ui.webView.load(local_url)
        #self.ui.commandLinkButton.setFixedSize(50, 50)
        self.ui.search_btn.clicked.connect(lambda: self.search_comp(series))
        self.ui.log_btn.clicked.connect(lambda: self.log())
        self.ui.init_code_btn.clicked.connect(
            lambda: self.code_sort_tree(series))
        self.ui.init_category_btn.clicked.connect(
            lambda: self.init_treeWidget(list1, series))

        self.ui.commandLinkButton.clicked.connect(
            self.classify)  #when the arrow button is clicked, trigger events

        #self.ui.commandLinkButton.clicked.connect(lambda action: self.classify(action, self.ui.treewidget))
        #  QSizePolicy
        try:
            retain_size = self.ui.dateEdit_2.sizePolicy()
            retain_size.setRetainSizeWhenHidden(True)
            self.ui.dateEdit_2.setSizePolicy(retain_size)
            retain_size = self.ui.comboBox.sizePolicy()
            retain_size.setRetainSizeWhenHidden(True)
            #            self.ui.comboBox.setSizePolicy(retain_size)
            retain_size = self.ui.label_2.sizePolicy()
            retain_size.setRetainSizeWhenHidden(True)
            self.ui.label_2.setSizePolicy(retain_size)
        except AttributeError:
            print("No PYQT5 Binding! Widgets might be deformed")
        self.ui.dateEdit.setDate(pastQL)
        self.ui.dateEdit_2.setDate(curdateQ)  #populate widgets
        self.ui.dateEdit.setCalendarPopup(True)
        self.ui.dateEdit_2.setCalendarPopup(True)
        self.ui.comboBox.addItems(["D"])
        self.ui.treeWidget_2.setDragDropMode(self.ui.treeWidget_2.InternalMove)
        self.ui.treeWidget_2.setContextMenuPolicy(Qt.CustomContextMenu)
        self.ui.treeWidget_2.customContextMenuRequested.connect(
            self.openWidgetMenu)
        #self.ui.toolbutton.clicked.connect(lambda action: self.graphmerge(action, CombineKeyword))
        self.ui.combobox.currentIndexChanged.connect(
            lambda: self.modifycombo(pastQL, pastQ))

    def log(self):
        widget = QWidget(None)
        self.w1 = Ui_Form().setupUi(widget)
        # self.w1.pushButton.clicked.connect(self.w1.login)
        # self.w1.goregister.clicked.connect(self.w1.login)
        self.w1.show()

    def init_treeWidget(self, list1, series):
        self.ui.treeWidget.clear()
        for j in list1:
            parent = QTreeWidgetItem(
                self.ui.treeWidget)  #populate treewidget with names
            parent.setText(0, j)
            var = series.loc[series["c_name"] == j]
            list2 = var["code"].tolist()
            name = var["name"].tolist()
            #var = showcollection(i) #Display database items
            for idx, val in enumerate(list2):
                child = QTreeWidgetItem(parent)
                child.setText(0, name[idx] + "-" + str(val))
                #for i in Drag:
                #grandson = QTreeWidgetItem(child)     #Commented out because increases program response time
                #grandson.setText(0, i)
        #self.ui.treeWidget.itemDoubleClicked.connect(self.onClickItem) #Display Collection items

    def code_sort_tree(self, companies):
        self.ui.treeWidget.clear()
        sorted_comps = companies.sort_values(["code"])
        code_list = sorted_comps["code"].tolist()
        name_list = sorted_comps["name"].tolist()
        shares_parent = QTreeWidgetItem(self.ui.treeWidget)
        shares_parent.setText(0, "个股行情")
        for idx, val in enumerate(code_list):
            child = QTreeWidgetItem(shares_parent)
            child.setText(0, name_list[idx] + "-" + str(val))
        self.ui.treeWidget.expandToDepth(0)

    def search_comp(self, companies):
        self.ui.treeWidget.clear()
        text = self.ui.search_lineEdit.text()
        print(text)
        filtered_codes = companies[companies['code'].str.contains(text)]
        filtered_names = companies[companies['name'].str.contains(text)]
        filtered_comps = filtered_codes.append(filtered_names)
        code_list = filtered_comps["code"].tolist()
        name_list = filtered_comps["name"].tolist()
        parent = QTreeWidgetItem(self.ui.treeWidget)
        parent.setText(0, "搜索结果")
        for idx, val in enumerate(code_list):
            child = QTreeWidgetItem(parent)
            child.setText(0, name_list[idx] + "-" + str(val))
        self.ui.treeWidget.expandToDepth(0)

    def modifycombo(self, pastQL, pastQ):
        if self.ui.combobox.currentText() == u"回测分析系统":
            self.ui.label_2.show()
            self.ui.dateEdit_2.show()
            self.ui.dateEdit.setDate(pastQL)
            self.ui.interval_label.show()
            self.ui.comboBox.hide()
            self.ui.comboBox.clear()
            self.ui.comboBox.addItems(["D"])  #same as above
            self.ui.treeWidget_2.clear()
        if self.ui.combobox.currentText() == u"获取历史K线":
            self.ui.label_2.show()
            self.ui.dateEdit_2.show()
            self.ui.dateEdit.setDate(pastQL)
            self.ui.interval_label.show()
            self.ui.comboBox.show()
            self.ui.comboBox.clear()
            self.ui.comboBox.addItems(["D", "W", "M", "5", "15", "30",
                                       "60"])  #same as above
            self.ui.treeWidget_2.clear()
        if self.ui.combobox.currentText(
        ) == u"获取复权数据":  #if 复权 is selected, clear all existing queries to avoid value conflict
            self.ui.label_2.show()
            self.ui.dateEdit_2.show()
            self.ui.dateEdit.setDate(pastQL)
            self.ui.interval_label.show()
            self.ui.comboBox.show()
            self.ui.comboBox.clear()
            self.ui.comboBox.addItems(["hfq", "qfq"])
            self.ui.treeWidget_2.clear()

        if self.ui.combobox.currentText() == u"获取分笔数据":
            self.ui.interval_label.hide()
            self.ui.comboBox.hide()
            self.ui.label_2.hide()
            self.ui.dateEdit_2.hide()
            self.ui.dateEdit.setDate(pastQ)
            self.ui.treeWidget_2.clear()
        if self.ui.combobox.currentText() == u"获取历史分钟数据":
            self.ui.interval_label.hide()
            self.ui.comboBox.show()
            self.ui.comboBox.clear()
            self.ui.comboBox.addItems(
                ["1min", "5min", "15min", "30min", "60min"])
            self.ui.label_2.hide()
            self.ui.dateEdit_2.hide()
            self.ui.dateEdit.setDate(pastQ)
            self.ui.treeWidget_2.clear()
        if self.ui.combobox.currentText() == u"分析十大股东":
            self.ui.interval_label.hide()
            self.ui.comboBox.hide()
            self.ui.label_2.hide()
            self.ui.dateEdit_2.hide()
            self.ui.treeWidget_2.clear()

    def openMenu(self, position):
        indexes = self.ui.treeWidget.selectedIndexes()
        item = self.ui.treeWidget.itemAt(position)
        db_origin = ""
        #if item.parent():
        #   db_origin = item.parent().text(0)
        collec = str(item.text(0).encode("utf-8"))
        if len(indexes) > 0:
            level = 0
            index = indexes[0]
            while index.parent().isValid():
                index = index.parent()
                level = level + 1
            menu = QMenu()
            #print((collec, db_origin))
            if level == 0:
                pass
            else:
                #keyarray = GetKeys(collec, db_origin)
                #if "Open" in keyarray:
                if self.ui.combobox.currentText() == u"回测分析系统":
                    menu.addAction(QAction("ATP model", menu, checkable=True))
                if self.ui.combobox.currentText() == u"获取历史K线":
                    menu.addAction(QAction("Kline", menu, checkable=True))
                    menu.addAction(QAction("Open", menu, checkable=True))
                    menu.addAction(
                        QAction("Close", menu, checkable=True)
                    )  #open up different menu with different kind of graphs
                    menu.addAction(QAction("High", menu, checkable=True))
                    menu.addAction(QAction("Low", menu, checkable=True))
                    menu.addAction(QAction("Volume", menu, checkable=True))
                    #menu.addAction(QAction("P_change", menu, checkable=True))
                    #menu.addAction(QAction("Turnover",menu,checkable=True))
                if self.ui.combobox.currentText() == u"获取复权数据":
                    menu.addAction(QAction("Kline", menu, checkable=True))
                    menu.addAction(QAction("Open", menu, checkable=True))
                    menu.addAction(QAction("Close", menu, checkable=True))
                    menu.addAction(QAction("High", menu, checkable=True))
                    menu.addAction(QAction("Low", menu, checkable=True))
                    menu.addAction(QAction("Volume", menu, checkable=True))
                    menu.addAction(QAction("Amount", menu, checkable=True))
                if self.ui.combobox.currentText() == u"获取分笔数据":
                    menu.addAction(QAction("分笔", menu, checkable=True))
                if self.ui.combobox.currentText() == u"获取历史分钟数据":
                    menu.addAction(QAction("Kline", menu, checkable=True))
                    menu.addAction(QAction("Open", menu, checkable=True))
                    menu.addAction(QAction("Close", menu, checkable=True))
                    menu.addAction(QAction("High", menu, checkable=True))
                    menu.addAction(QAction("Low", menu, checkable=True))
                    menu.addAction(QAction("Volume", menu, checkable=True))
                    menu.addAction(QAction("Amount", menu, checkable=True))
                if self.ui.combobox.currentText() == u"分析十大股东":
                    menu.addAction(QAction("季度饼图", menu, checkable=True))
                    #menu.addAction(QAction("持股比例", menu, checkable=True))
                #for g in keyarray:
                #menu.addAction(QAction(g, menu, checkable=True))
        menu.triggered.connect(
            lambda action: self.methodSelected(action, collec))
        menu.exec_(self.ui.treeWidget.viewport().mapToGlobal(position))

    def methodSelected(self, action, collec):
        # print(action.text()) #Choice
        # if (self.ui.treewidget.count() == 5):
        #   self.ui.label.setText("Maximum number of queries")
        #   return
        # self.ui.label.setText("")
        Choice = action.text()
        Stock = collec
        # print(collec)  #Stock Name
        # print(db_origin)  #DataBase name
        # list1 = [self.tr(Stock+"-"+Choice+"-"+db_origin)]
        # self.ui.treewidget.addItems(list1)
        parent = QTreeWidgetItem(self.ui.treeWidget_2)
        parent.setText(0, Stock.decode("utf-8") + "-" + Choice)

    def openWidgetMenu(self, position):
        indexes = self.ui.treeWidget_2.selectedIndexes()
        item = self.ui.treeWidget_2.itemAt(position)
        if item == None:
            return
        #item = self.ui.listWidget.itemAt(position)
        if len(indexes) > 0:
            menu = QMenu()
            menu.addAction(
                QAction("Delete", menu,
                        checkable=True))  #This function is perhaps useless
            #menu.triggered.connect(self.eraseItem)
            item = self.ui.treeWidget_2.itemAt(position)
            #collec = str(item.text())
            menu.triggered.connect(
                lambda action: self.ListMethodSelected(action, item))
        menu.exec_(self.ui.treeWidget_2.viewport().mapToGlobal(position))

    def ListMethodSelected(self, action, item):
        if action.text() == "Delete":
            self.eraseItem()
        if action.text() == "Combine":
            global CombineKeyword
            collec = str(item.text())
            CombineKeyword.append(collec)  #Useless function(maybe?)
            list1 = [self.tr(collec)]
            self.ui.listwidget.addItems(list1)
            self.eraseItem()

    def eraseItem(self):
        for x in self.ui.treeWidget_2.selectedItems(
        ):  #delete with write click menu
            #item = self.ui.treewidget.takeItem(self.ui.treewidget.currentRow())
            sip.delete(x)
            #item.delete

    def classify(self, folder):

        startdate = self.ui.dateEdit.date()
        startdate = startdate.toPyDate()
        startdate = startdate.strftime(
            "%Y/%m/%d")  #converts date from dateedit to tushare readable date
        enddate = self.ui.dateEdit_2.date()
        enddate = enddate.toPyDate()
        enddate = enddate.strftime("%Y/%m/%d")
        option = self.ui.comboBox.currentText()
        option = str(option)
        #if (self.ui.treewidget) == 0:
        #self.ui.label.setText("Need to select at least one query")
        #return
        root = self.ui.treeWidget_2.invisibleRootItem(
        )  # This is for iterating child items
        child_count = root.childCount()
        texts = []
        if child_count == 0:
            return
        for i in range(child_count):
            item = root.child(i)
            text = item.text(0)  #with 3 part'stock_name'+'-'+'code'+'-'+action
            texts.append(text)
        labels = [k for k in texts]
        #items = ([x.encode("utf-8") for x in labels])
        width = self.ui.webView.width(
        )  #give width and height of user's screen so that graphs can be generated with dynamic size
        height = self.ui.webView.height()
        display(labels, startdate, enddate, option, width,
                height)  #labels:复权ork线or分笔 option:hfq, qfq or 15, 30, D, etc
        self.ui.webView.reload()  #refreshes webengine
        self.ui.webView.repaint()
        self.ui.webView.update()

    def graphmerge(self, combineKeyword):
        sth = ""
        for i in combineKeyword:
            if sth == "":
                sth = sth + i
            else:
                sth = sth + "\n" + "&" + "-" + i
        list1 = sth
        return sth
        global CombineKeyword
        CombineKeyword = []
        self.ui.listwidget.clear(
        )  #combine stuff so that different graphs can be drawn together
 def log(self):
     widget = QWidget(None)
     self.w1 = Ui_Form().setupUi(widget)
     # self.w1.pushButton.clicked.connect(self.w1.login)
     # self.w1.goregister.clicked.connect(self.w1.login)
     self.w1.show()
Esempio n. 7
0
class mainInterface(QWidget):

    # 定义信号
    processFinished = pyqtSignal(dict)

    def __init__(self):
        """
        初始化
        :return: null
        """
        # 超类初始化
        super().__init__()

        # UI初始化
        self.ui = Ui_mainWidget()
        self.ui.setupUi(self)
        self.grabKeyboard()
        self.setMouseTracking(True)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setWindowIcon(QIcon('OCR.ico'))

        # 初始化相机
        self.camera = QCamera()
        self.imageCapture = QCameraImageCapture(self.camera)
        self.viewsetting = QCameraViewfinderSettings()
        self.initimplement()

        # 初始化标题栏
        self.initTitleBar()

        # 初始化系统托盘
        self.tray = QSystemTrayIcon()
        self.tray.setIcon(QIcon('OCR.ico'))
        self.initTray()

        # OCR识别部分
        self.OCR = ocr()
        self.OCR.setappid('1257206643')
        self.OCR.setsecretid('AKIDFTddWEg9Ncsz0sE7oOpBNOExdDdeCUJ3')
        self.OCR.setsecretkey('FQitsgUND8yfrZK0RrBMOJB5tWhCm5Ol')

        # 初始化登录部分
        self.logWidget = QWidget()
        self.logui = Ui_Form()
        self.logui.setupUi(self.logWidget)
        self.logWidget.setWindowFlags(Qt.FramelessWindowHint)
        self.logWidget.setWindowModality(Qt.ApplicationModal)
        self.logui.close_btn.clicked.connect(self.logWidget.close)

        # 初始化变量
        self.mousePressd = False
        self.mousePoint = None
        self.result = {}
        self.isFirst = False
        self.ocrType = ocrType.ocr_general  # 默认为印刷体识别

        # 初始化字定义信号连接
        self.processFinished.connect(self.updateOCRInfo)
        self.ui.btn_login.clicked.connect(self.logWidget.show)
        self.ui.comboBox_choose.currentIndexChanged.connect(self.changeocrType)

    def initTitleBar(self):
        """
        初始化标题栏
        :return: null
        """
        self.ui.frame.setStyleSheet(
            "QFrame#frame{background-color:rgb(244, 76, 76);}")
        self.ui.label_logo.setStyleSheet(
            "QLabel{border-image:url(./image/ocr.png);}")
        self.ui.label_title.setStyleSheet(
            "QLabel{border-image:url(./image/iOCR.png);}")
        self.ui.comboBox_choose.setStyleSheet(
            "QComboBox {border-radius:15px;border: 2px solid #4AFFF4;font-family:'楷体';font-size:20px;}"
            "QComboBox QAbstractItemView::item{height:50px;width:200px;}"
            "QComboBox::down-arrow{image: url(./image/arrow.png);width:25px;height:25px;}"
            "QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position:top right;border:none;margin-right:30px;}"
            "QComboBox::down-arrow:hover{image:url(./image/arrow_hover.png);width:25px;height:25px;}"
            "QComboBox::down-arrow:on {top: 1px;left: 1px;}")
        self.ui.comboBox_choose.insertItem(0, '       印刷体识别')
        self.ui.comboBox_choose.insertItem(1, '       手写体识别')
        self.ui.comboBox_choose.insertItem(2, '       身份证识别')
        self.ui.comboBox_choose.insertItem(3, '       名片识别')
        self.ui.comboBox_choose.insertItem(4, '       银行卡识别')
        self.ui.btn_login.setStyleSheet(
            "QPushButton{border-image:url(./image/default-portrait.png);}")
        self.ui.btn_setting.setStyleSheet(
            "QPushButton{border-image:url(./image/settings.png);}"
            "QPushButton:hover{border-image:url(./image/qcconfig-hover.png);}")
        self.ui.btn_min.setStyleSheet(
            "QPushButton{border-image:url(./image/mini_new.png);}"
            "QPushButton:hover{border-image:url(./image/mini_hover_new.png);}")
        self.ui.btn_close.setStyleSheet(
            "QPushButton{border-image:url(./image/close.png);}"
            "QPushButton:hover{border-image:url(./image/close-hover.png);}")
        self.ui.checkBox_cam.setStyleSheet(
            "QCheckBox{spacing: 5px;font-size: 24px;vertical-align:middle}"
            "QCheckBox::indicator { width: 45px;height: 45px;}"
            "QCheckBox::indicator::unchecked {image: url(./image/close_cam.png);}"
            "QCheckBox::indicator::checked { image: url(./image/open_cam.png);}"
        )
        self.ui.captureBtn.setStyleSheet(
            "QPushButton{border-style: outset;border-width: 2px;border-color: rgb(82,215,100);border-radius: 5px;font-size: 24px;}"
            "QPushButton:pressed{background-color: rgb(176,215,181);border-style: inset;}"
        )

        self.ui.checkBox_cam.setChecked(True)

        self.ui.btn_close.clicked.connect(lambda: qApp.quit())
        self.ui.btn_min.clicked.connect(self.miniToTray)
        self.ui.checkBox_cam.stateChanged.connect(self.camControl)

    def initTray(self):
        """
        初始化系统托盘信息
        :return:
        """
        tray_menu = QMenu()
        restoreAction = QAction('&Show', self)
        quitAction = QAction('&Quit', self)
        tray_menu.addAction(restoreAction)
        tray_menu.addAction(quitAction)
        self.tray.setContextMenu(tray_menu)
        restoreAction.triggered.connect(self.trayActivatedEvent)
        quitAction.triggered.connect(qApp.quit)
        self.tray.activated.connect(self.trayActivatedEvent)

    def initimplement(self):
        """
        初始化实现端口
        :return: ui
        """
        camInfo = QCameraInfo(self.camera)
        if camInfo.defaultCamera().isNull():
            QMessageBox.warning(self, 'Warning', 'No available camera!',
                                QMessageBox.Ok)
            return -1
        else:
            self.ui.caputurePhoto.setText(camInfo.description())
            self.camera.setViewfinder(self.ui.cameraShow)
            self.camera.setCaptureMode(QCamera.CaptureStillImage)
            self.camera.load()
            resolution = self.camera.supportedViewfinderResolutions()
            if len(resolution) != 0:
                if QSize(640, 480) in resolution:
                    self.viewsetting.setResolution(QSize(640, 480))
                elif QSize(640, 360) in resolution:
                    self.viewsetting.setResolution(QSize(640, 360))
                else:
                    self.viewsetting.setResolution(resolution[0])
                self.camera.setViewfinderSettings(self.viewsetting)

            # ------------------------------Note--------------------------------
            # 此种方法利用摄像头准备捕捉图像的状态来进行捕捉图像,readyForCapture
            # 为true时,才进行捕捉图像,详见下面捕捉函数槽函数。这种方法将进行不
            # 停的捕捉,将每次捕捉的相邻图像进行图像相似度判断。当图像相似度低于
            # 阈值时,认定为新图像,才进行OCR识别。否则仅捕捉图像而不进行识别。当
            # 然捕捉图像速度过于太快时,可以用定时器,每隔0.5秒,去检查readyFor
            # Capture状态位,进而有效控制程序资源。
            # 本应用中采用按键捕捉方式,非自动,详见下面按键捕捉事件
            # ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
            # self.imageCapture.readyForCaptureChanged.connect(self.captureimage)

            self.camera.start()

        self.ui.caputurePhoto.setScaledContents(True)

        self.imageCapture.setCaptureDestination(
            QCameraImageCapture.CaptureToBuffer)

        self.imageCapture.imageCaptured.connect(self.displayimage)

        self.ui.captureBtn.clicked.connect(self.openDlg)

    def displayimage(self, num, image):
        """
        显示图形
        :param num: number
        :param image: image
        :return: null
        """
        self.ui.caputurePhoto.setPixmap(QPixmap.fromImage(image))
        self.ui.ocrInfo.setText('识别中......')
        t = threading.Thread(target=self.ocrForImage, args=(image, ))
        t.start()

    # def captureimage(self, state):
    #     """
    #     捕捉图像槽函数
    #     :state: 状态变量
    #     :return: null
    #     """
    #     if state is True:
    #         self.camera.searchAndLock()
    #         self.imageCapture.capture()
    #         self.camera.unlock()

    # def saveimage(self):
    #     """
    #     保存图像槽函数
    #     :return: null
    #     """
    #     pix = QPixmap(self.ui.caputurePhoto.pixmap())
    #     if pix:
    #         pix.save(r'D://1.png', 'PNG')
    #         QMessageBox.information(self, 'Message', 'Capture Successfully', QMessageBox.Ok)

    def ocrForImage(self, image):
        """
        为截取的图片进行ocr识别
        :param image: QImage
        :return: null
        """
        # Note:子线程里不能对ui界面做改动,ui界面修改只能在主线程中修改,下面注释的做法是错误的
        # self.ui.ocrInfo.setText('识别中......')
        byte = QByteArray()
        buffer = QBuffer(byte)
        buffer.open(QIODevice.WriteOnly)
        image.save(buffer, 'PNG')
        if self.ocrType == ocrType.ocr_general:
            self.result = self.OCR.client.general_detect(
                CIBuffers([byte.data()]))
        elif self.ocrType == ocrType.ocr_handwriting:
            self.result = self.OCR.client.handwriting_detect(
                CIBuffers([byte.data()]))
        elif self.ocrType == ocrType.ocr_idcard:
            self.result = self.OCR.client.idcard_detect(
                CIBuffers([byte.data()]), 0)
        elif self.ocrType == ocrType.ocr_namecard:
            self.result = self.OCR.client.namecard_detect(
                CIBuffers([byte.data()]), 0)
        elif self.ocrType == ocrType.ocr_bankcard:
            self.result = self.OCR.client.bankcard_detect(
                CIBuffers([byte.data()]))
        else:
            pass
        self.processFinished.emit(self.result)

    def updateOCRInfo(self, res):
        """
        将ocr识别结果显示在信息框中
        :param res:
        :return:
        """
        if self.ocrType == ocrType.ocr_general or self.ocrType == ocrType.ocr_handwriting:
            if res['code'] == 0 and res['message'] == 'OK':
                self.ui.ocrInfo.setText('OK')
                ocrInfo = []
                for i in range(len(self.result['data']['items'])):
                    ocrInfo.append(
                        self.result['data']['items'][i]['itemstring'])
                self.ui.ocrInfo.setText(''.join(ocrInfo))
            else:
                self.ui.ocrInfo.setText('识别失败!')
        elif self.ocrType == ocrType.ocr_bankcard:
            if res['code'] == 0 and res['message'] == 'OK':
                self.ui.ocrInfo.setText('OK')
                ocrInfo = []
                for i in range(len(self.result['data']['items'])):
                    ocrInfo.append(self.result['data']['items'][i]['item'])
                    ocrInfo.append(':')
                    ocrInfo.append(
                        self.result['data']['items'][i]['itemstring'])
                    ocrInfo.append('\n')
                self.ui.ocrInfo.setText(''.join(ocrInfo))
            else:
                self.ui.ocrInfo.setText('识别失败!')
        elif self.ocrType == ocrType.ocr_idcard:
            if res['result_list'][0]['code'] == 0 and res['result_list'][0][
                    'message'] == 'OK':
                self.ui.ocrInfo.setText('OK')
                ocrInfo = []
                ocrInfo_keys = list(
                    self.result['result_list'][0]['data'].keys())
                ocrInfo_values = list(
                    self.result['result_list'][0]['data'].values())
                for i in range(
                        len(self.result['result_list'][0]['data']) // 2):
                    ocrInfo.append(ocrInfo_keys[i])
                    ocrInfo.append(':')
                    ocrInfo.append(ocrInfo_values[i])
                    ocrInfo.append('\n')
                self.ui.ocrInfo.setText(''.join(ocrInfo))
            else:
                self.ui.ocrInfo.setText('识别失败!')
        elif self.ocrType == ocrType.ocr_namecard:
            if res['result_list'][0]['code'] == 0 and res['result_list'][0][
                    'message'] == 'OK':
                self.ui.ocrInfo.setText('OK')
                ocrInfo = []
                for i in range(len(self.result['result_list'][0]['data'])):
                    ocrInfo.append(
                        self.result['result_list'][0]['data'][i]['item'])
                    ocrInfo.append(':')
                    ocrInfo.append(
                        self.result['result_list'][0]['data'][i]['value'])
                    ocrInfo.append('\n')
                self.ui.ocrInfo.setText(''.join(ocrInfo))
            else:
                self.ui.ocrInfo.setText('识别失败!')
        else:
            pass

    def camControl(self, state):
        """
        槽函数
        控制相机开关
        :param state: checkbox开关状态
        :return:null
        """
        if state == Qt.Unchecked:
            self.ui.cameraShow.setUpdatesEnabled(False)
        elif state == Qt.Checked:
            self.ui.cameraShow.setUpdatesEnabled(True)
        else:
            return -1

    def miniToTray(self):
        """
        槽函数
        最小化到系统托盘
        :return:null
        """
        if not self.tray.isVisible():
            self.tray.show()
        if self.tray.isVisible():
            if self.isFirst is False:
                QMessageBox.information(
                    self, "Systray", "The program will keep running in the "
                    "system tray. To terminate the program, "
                    "choose <b>Quit</b> in the context menu "
                    "of the system tray entry.")
                self.isFirst = True
            self.hide()

    def trayActivatedEvent(self, reason):
        """
        槽函数
        响应点击托盘图标
        :param reason: 响应原因
        :return: null
        """
        if reason == QSystemTrayIcon.Context:
            pass
        else:
            self.tray.hide()
            self.show()

    def openDlg(self):
        """
        槽函数
        打开对话框选取文件
        :return:文件名
        """
        filename, filetype = QFileDialog.getOpenFileName(
            self, '选取图片', path.expanduser('~'),
            "Image Files (*.png *.jpg *.bmp)")
        if filename:
            if QFile(filename).size() >= 6291456:
                QMessageBox.information(self, '打开图片',
                                        '选择图片大于6MB大小,暂不支持识别,请重新选择。')
                self.openDlg()
            else:
                self.displayimage(0, QImage(filename))

    def keyPressEvent(self, e):
        """
        槽函数
        键盘按键响应事件
        :param e: 按键事件
        :return: null
        """
        if e.key() == Qt.Key_Space:
            if self.imageCapture.isReadyForCapture():
                self.camera.searchAndLock()
                self.imageCapture.capture()
                self.camera.unlock()

    def mouseMoveEvent(self, e):
        """
        槽函数
        定义鼠标移动事件
        :param e: QMouseEvent
        :return: null
        """
        if (e.buttons() == Qt.LeftButton) and self.mousePressd:
            self.move(e.globalPos() - self.mousePoint)
            e.accept()

    def mousePressEvent(self, e):
        """
        槽函数
        定义鼠标按下事件
        :param e: QMouseEvent
        :return: null
        """
        if e.button() == Qt.LeftButton:
            self.mousePressd = True
            self.mousePoint = e.globalPos() - self.pos()
            e.accept()

    def mouseReleaseEvent(self, e):
        """
        槽函数
        定义鼠标松开事件
        :param e: QMouseEvent
        :return: null
        """
        self.mousePressd = False

    def changeocrType(self, index):
        """
        槽函数
        改变ocr识别类型
        :param index: int
        :return: null
        """
        if index == 0:
            self.ocrType = ocrType.ocr_general
        elif index == 1:
            self.ocrType = ocrType.ocr_handwriting
        elif index == 2:
            self.ocrType = ocrType.ocr_idcard
        elif index == 3:
            self.ocrType = ocrType.ocr_namecard
        elif index == 4:
            self.ocrType = ocrType.ocr_bankcard
        else:
            pass
Esempio n. 8
0
	def __init__(self, parent=None):
		QtGui.QWidget.__init__(self,parent)
		self.vlogin = Ui_Form()
		self.vlogin.setupUi(self)

		self.connect(self.vlogin.btn_aceptar, QtCore.SIGNAL('clicked()'),self.validaUsuario)
Esempio n. 9
0
class v_login(QtGui.QDialog):
	def __init__(self, parent=None):
		QtGui.QWidget.__init__(self,parent)
		self.vlogin = Ui_Form()
		self.vlogin.setupUi(self)

		self.connect(self.vlogin.btn_aceptar, QtCore.SIGNAL('clicked()'),self.validaUsuario)

	def conectaPosMaster_Valida(self,sentencia):
			return False
			"""
			#QMessageBox.about(self, "Error Acceso Denegado", 'entre a consulta')
			conn = pyodbc.connect("DRIVER={SQL Server};SERVER=192.168.1.1;UID=usuario;PWD=password;")
			curs = conn.cursor()
			curs.execute(sentencia)
			rows = curs.fetchall()
			  
			  
			if rows != "[]":

				for row in rows:
				   global usuario
				   usuario = row.emp_nombre
				   return True

			else:

				return False		
			  
			curs.close ()
			conn.close () #"""

	def validaUsuario(self):
		usuario = self.vlogin.t_usuario.text()
		passwd = self.vlogin.t_password.text()


		passwd = passwd.encode('utf-8')
		passwd_md5 = hashlib.md5(passwd).hexdigest()
		#QMessageBox.about(self, "Error Acceso Denegado", passwd_md5)

		tienda_var = "select emp_nombre, emp_id, app_permiso\
		              from soporte..cat_empleado, soporte..cat_empleado_app\
		              where app_emp = emp_id\
		                    and emp_login = '******'\
		                    and emp_password = '******' and app_desc = 'DHCP'" % (usuario,passwd_md5)

		        
		if self.conectaPosMaster_Valida(tienda_var) == True:
			
			self.ventana()
		    
		else:
			QMessageBox.about(self, "Error Acceso Denegado", str('Acceso Denegado, Verifica Password '))
			self.vlogin.t_password.clear() 



		

	def ventana(self):
		#global usuario
		global ip
		self.hide()
		
		#usuario = self.vlogin.t_usuario.text()
		ip = socket.gethostbyname(socket.gethostname())

		self.w = v_principal()
		self.w.show()
Esempio n. 10
0
 def __init__(self):
     Ui_Form.__init__(self)
     self.qwidget = QWidget()
     self.setupUi(self.qwidget)
     self.qwidget.setWindowTitle("欢迎")
 def __init__(self):
     super(Login, self).__init__()
     self.ui = Ui_Form()
     self.ui.setupUi(self)
     self.escuchador()
     self.show()
class Login(QtWidgets.QWidget):

    def __init__(self):
        super(Login, self).__init__()
        self.ui = Ui_Form()
        self.resize(507, 249)
        self.setFixedSize(self.width(), self.height())
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.login)
        self.series = ''
        self.room_id = ''
        self.auto_login()  # 自动登录

    # 绑定会议室序列号,并执行登录
    def login(self):
        print("绑定会议室")
        self.series = self.ui.lineEdit.text()           # 得到输入的值
        response = self.verify_series(self.series, verify_type=0)     # 验证输入的序列号
        print(response)
        if response['status'] == 1:
            self.room_id = response['room_id']
            # 保存配置
            config = {}
            config['series'] = self.series
            config['id'] = self.room_id
            config_file_path = '../config/room.json'
            with open(config_file_path, 'w+') as f:
                config = f.write(json.dumps(config))        # 写入配置文件
            index.get_data()                                # 开启更新检测
            index.show()                                    # 页面跳转
            self.close()
        else:
            # 使用infomation信息框
            QtWidgets.QMessageBox.information(self, "绑定失败", response['message'],  QtWidgets.QMessageBox.Close)

    def auto_login(self):
        config_file_path = '../config/room.json'
        with open(config_file_path, 'r+') as f:
            config = f.read()
            config = json.loads(config)
        if config['series'] == '':
            pass
        else:
            # 验证序列号
            self.series = config['series']
            self.ui.lineEdit.setText(self.series)               # 读取当前配置
            self.room_id = config['id']
            # 向后台请求数据,验证序列号
            # response = self.verify_series(self.series, verify_type=1, room_id=self.room_id)
            # print(response)
            # if response['status'] == 1:     # 验证通过
            #     self.close()
            #     index.show()                # 执行自动登录
            # else:
            #     QtWidgets.QMessageBox.information(self, "验证失败", response['message'], QtWidgets.QMessageBox.Close)

    # 验证/绑定序列号
    def verify_series(self, series, verify_type, room_id=None):                 # verify_type为验证类型,为0时绑定, 为1时验证
        data = {'series': series, 'room_id': room_id, 'type':  verify_type}
        url = Server_IP + '/meeting/verify_series/'
        r = requests.post(url, data=data)
        response = r.content.decode('utf-8')
        response = json.loads(response)
        return response
Esempio n. 13
0
class v_login(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.vlogin = Ui_Form()
        self.vlogin.setupUi(self)

        self.connect(self.vlogin.btn_aceptar, QtCore.SIGNAL('clicked()'),
                     self.validaUsuario)

    def conectaPosMaster_Valida(self, sentencia):
        return False
        """
			#QMessageBox.about(self, "Error Acceso Denegado", 'entre a consulta')
			conn = pyodbc.connect("DRIVER={SQL Server};SERVER=192.168.1.1;UID=usuario;PWD=password;")
			curs = conn.cursor()
			curs.execute(sentencia)
			rows = curs.fetchall()
			  
			  
			if rows != "[]":

				for row in rows:
				   global usuario
				   usuario = row.emp_nombre
				   return True

			else:

				return False		
			  
			curs.close ()
			conn.close () #"""

    def validaUsuario(self):
        usuario = self.vlogin.t_usuario.text()
        passwd = self.vlogin.t_password.text()

        passwd = passwd.encode('utf-8')
        passwd_md5 = hashlib.md5(passwd).hexdigest()
        #QMessageBox.about(self, "Error Acceso Denegado", passwd_md5)

        tienda_var = "select emp_nombre, emp_id, app_permiso\
		              from soporte..cat_empleado, soporte..cat_empleado_app\
		              where app_emp = emp_id\
		                    and emp_login = '******'\
		                    and emp_password = '******' and app_desc = 'DHCP'" % (
            usuario, passwd_md5)

        if self.conectaPosMaster_Valida(tienda_var) == True:

            self.ventana()

        else:
            QMessageBox.about(self, "Error Acceso Denegado",
                              str('Acceso Denegado, Verifica Password '))
            self.vlogin.t_password.clear()

    def ventana(self):
        #global usuario
        global ip
        self.hide()

        #usuario = self.vlogin.t_usuario.text()
        ip = socket.gethostbyname(socket.gethostname())

        self.w = v_principal()
        self.w.show()