Пример #1
0
class TableBuildForm(QWidget):
    def __init__(self):
        super(TableBuildForm, self).__init__()
        self.initUi()

    def initUi(self):
        # 获取显示器分辨率
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.height = self.screenRect.height()
        self.width = self.screenRect.width()
        self.resize(self.width, self.height)
        self.setWindowTitle("数据表定义")

        mainLayout = QHBoxLayout()
        centerLayout = QVBoxLayout()
        rightLayout = QVBoxLayout()

        mainLayout.addLayout(centerLayout)
        mainLayout.addLayout(rightLayout)
        self.setLayout(mainLayout)

        centerTopLayout = QHBoxLayout()
        centerCenterLayout = QVBoxLayout()
        centerBottomLayout = QHBoxLayout()

        centerLayout.addLayout(centerTopLayout)
        centerLayout.addLayout(centerCenterLayout)
        centerLayout.addLayout(centerBottomLayout)

        zlkmcLabel = QLabel("资料库名称")
        self.zlkmcLineEdit = QLineEdit()
        bmcLabel = QLabel('数据表名称')
        self.bmcLineEdit = QLineEdit()
        bjxLabel = QLabel('内部名称')
        self.bjxLineText = QLineEdit()

        centerTopLayout.addWidget(zlkmcLabel)
        centerTopLayout.addWidget(self.zlkmcLineEdit)
        centerTopLayout.addWidget(bmcLabel)
        centerTopLayout.addWidget(self.bmcLineEdit)
        centerTopLayout.addWidget(bjxLabel)
        centerTopLayout.addWidget(self.bjxLineText)

        self.dataTableWidget = QTableWidget()
        centerCenterLayout.addWidget(self.dataTableWidget)

        self.dataTableWidget.setColumnCount(7)
        self.dataTableWidget.setHorizontalHeaderLabels(
            ['数据项名称', '字段名称', '数据类型', '数据大小', '数据来源', '主键', '是否为空'])
        self.dataTableWidget.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)
        self.dataTableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.dataTableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

        centerCenterLayout.addWidget(self.dataTableWidget)

        testTableExistButton = QPushButton("数据表检测")
        reBuildTabelButton = QPushButton("替换数据表")
        addTableButton = QPushButton("添加数据表")
        replaceTableButton = QPushButton("替换数据表")

        centerBottomLayout.addWidget(testTableExistButton)
        centerBottomLayout.addWidget(reBuildTabelButton)
        centerBottomLayout.addWidget(addTableButton)
        centerBottomLayout.addWidget(replaceTableButton)

        self.m_db = DBUtil()
        self.dataTableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.dataTableWidget.customContextMenuRequested.connect(
            self.GenerateRightMenu)
        self.fieldBuildForm = FieldBuildForm()
        self.fieldBuildForm.AddButton.clicked.connect(self.EditTableRow)
        testTableExistButton.clicked.connect(self.TestTableExist)
        reBuildTabelButton.clicked.connect(self.ReBuildTable)
        addTableButton.clicked.connect(self.AddTable)
        replaceTableButton.clicked.connect(self.ReplaceTable)

    def table_init(self, tbid, tbmc, tbjx):
        self.tbid = tbid
        self.tbmc = tbmc
        self.tbjx = tbjx
        self.bmcLineEdit.setText(tbmc)
        self.bjxLineText.setText(tbjx)
        #读取数据表信息
        field_info = self.m_db.GetFieldValueToStrGroupsFromDb(
            "ZDMC,MCJX,ZDLX,ZDDX,KZLX", "XTGLK.ZLFL_MSFF_FIELD",
            "where TBID='" + self.tbid + "'")
        if field_info != None:
            if len(field_info[0]) > 0:
                self.dataTableWidget.setRowCount(len(field_info[0]))
                for index in range(0, len(field_info[0])):
                    zdmc = field_info[0][index]
                    mcjx = field_info[1][index]
                    zdlx = field_info[2][index]
                    zddx = str(field_info[3][index])
                    kzlx = field_info[4][index]

                    if kzlx == '0':
                        kzlx = "0-用户输入"
                    elif kzlx == '1':
                        kzlx = "1-用户选择"
                    elif kzlx == '2':
                        kzlx = "2-系统生成"
                    elif kzlx == '3':
                        kzlx = "3-系统默认"
                    else:
                        kzlx = ""

                    zjs = self.m_db.GetFieldValueToStrListFromDb(
                        "ZDMC", "XTGLK.ZLFL_MSFF_FIELD_KEY",
                        "where TBID='" + self.tbid + "'")
                    zj = ''
                    if len(zjs) > 0:
                        if zjs.index(mcjx) >= 0:
                            zj = "主键"
                        else:
                            zj = "非主键"
                    else:
                        zj = "非主键"

                    sfwk = self.m_db.GetFieldValueToSingleStrFromDb(
                        "SFWK", "XTGLK.ZLFL_MSFF_FIELD_INFO", "where TBID='" +
                        self.tbid + "' and ZDMC='" + mcjx + "'")
                    if sfwk == "0":
                        sfwk = "可以为空"
                    else:
                        sfwk = "不能为空"

                    newitem = QTableWidgetItem(zdmc)
                    self.dataTableWidget.setItem(index, 0, newitem)
                    newitem = QTableWidgetItem(mcjx)
                    self.dataTableWidget.setItem(index, 1, newitem)
                    newitem = QTableWidgetItem(zdlx)
                    self.dataTableWidget.setItem(index, 2, newitem)
                    newitem = QTableWidgetItem(zddx)
                    self.dataTableWidget.setItem(index, 3, newitem)
                    newitem = QTableWidgetItem(kzlx)
                    self.dataTableWidget.setItem(index, 4, newitem)
                    newitem = QTableWidgetItem(zj)
                    self.dataTableWidget.setItem(index, 5, newitem)
                    newitem = QTableWidgetItem(sfwk)
                    self.dataTableWidget.setItem(index, 6, newitem)

    def GenerateRightMenu(self, pos):
        menu = QMenu()
        editItem = menu.addAction(u'编辑')
        preInsertItem = menu.addAction(u'前置插入')
        backInsertItem = menu.addAction(u'后置插入')
        deleteItem = menu.addAction(u'删除数据项')
        clearItem = menu.addAction(u'清除数据项')
        deleteMrItem = menu.addAction(u'删除默认数据项')

        action = menu.exec_(QCursor.pos())
        if action == editItem:
            self.ShowEditItemForm()
        elif action == preInsertItem:
            pass
        elif action == backInsertItem:
            pass
        elif action == deleteItem:
            pass
        elif action == clearItem:
            pass
        elif action == deleteMrItem:
            pass

    def ShowEditItemForm(self):
        selectedRow = self.dataTableWidget.currentIndex().row()
        if selectedRow != None:
            zdmc = self.dataTableWidget.item(selectedRow, 0).text()
            mcjx = self.dataTableWidget.item(selectedRow, 1).text()
            zdlx = self.dataTableWidget.item(selectedRow, 2).text()
            zddx = self.dataTableWidget.item(selectedRow, 3).text()
            kzlx = self.dataTableWidget.item(selectedRow, 4).text()
            zj = self.dataTableWidget.item(selectedRow, 5).text()
            sfwk = self.dataTableWidget.item(selectedRow, 6).text()
            self.fieldBuildForm.fieldInit(zdmc, mcjx, zdlx, zddx, kzlx, zj,
                                          sfwk)
            self.fieldBuildForm.setWindowModality(Qt.ApplicationModal)
            self.fieldBuildForm.show()

    def EditTableRow(self):
        self.fieldinfo = [
            self.fieldBuildForm.zdmcLineEdit.text(),
            self.fieldBuildForm.mcjxLineEdit.text(),
            self.fieldBuildForm.zdlxComboBox.currentText(),
            self.fieldBuildForm.zddxComboBox.currentText(),
            self.fieldBuildForm.kzlxComboBox.currentText(),
            self.fieldBuildForm.zjComboBox.currentText(),
            self.fieldBuildForm.sfwkComboBox.currentText()
        ]
        self.fieldBuildForm.hide()
        selectedRow = self.dataTableWidget.currentIndex().row()
        if selectedRow != None:
            for index in range(0, len(self.fieldinfo)):
                newitem = QTableWidgetItem(self.fieldinfo[index])
                self.dataTableWidget.setItem(selectedRow, index, newitem)

    def TestTableExist(self):
        tbinfos = self.tbjx.split('.')
        bExistTable = self.m_db.TestDataExist(
            "select count(*) from dba_tables where Owner='" + tbinfos[0] +
            "' and table_name='" + tbinfos[1] + "'")
        if bExistTable > 0:
            QMessageBox.information(self, "数据表检测", "数据表存在!", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "数据表检测", "数据表存在!", QMessageBox.Yes)

    def ReBuildTable(self):
        pass

    def AddTable(self):
        pass

    def ReplaceTable(self):
        pass
Пример #2
0
class DataClassForm(QWidget):
    def __init__(self):
        super(DataClassForm,self).__init__()
        self.initUi()
    def initUi(self):
        try:
            # 获取显示器分辨率
            self.desktop = QApplication.desktop()
            self.screenRect = self.desktop.screenGeometry()
            self.height = self.screenRect.height()
            self.width = self.screenRect.width()
            self.resize(self.width, self.height)
            self.setWindowTitle("数据分类管理")

            #layout_init
            mainLayout=QHBoxLayout()
            self.setLayout(mainLayout)


            leftLayout = QVBoxLayout()
            self.dataListGroupBox=QGroupBox("分类列表")
            self.datalistLayout=QVBoxLayout()
            self.dataListGroupBox.setLayout(self.datalistLayout)
            self.dataListTree=QTreeWidget()
            self.datalistLayout.addWidget(self.dataListTree)

            self.readDataListButton=QPushButton("读取分类")
            self.readTableButton = QPushButton("读取数据表")

            leftLayout.addWidget(self.dataListGroupBox)

            leftBottomLayout =QHBoxLayout()

            leftBottomLayout.addWidget(self.readDataListButton)
            leftBottomLayout.addWidget(self.readTableButton)
            leftLayout.addLayout(leftBottomLayout)

            centerLayout = QVBoxLayout()
            self.tableListGroupBox = QGroupBox("数据表列表")
            self.tablelistLayout = QVBoxLayout()

            self.tableListGroupBox.setLayout(self.tablelistLayout)
            self.dataTableWidget = QTableWidget()
            self.tablelistLayout.addWidget(self.dataTableWidget)

            centerBottomLayout = QHBoxLayout()
            self.defTableButton = QPushButton("自定义数据表")
            self.TableBrowseButton = QPushButton("数据浏览")
            centerBottomLayout.addWidget(self.defTableButton)
            centerBottomLayout.addWidget(self.TableBrowseButton)
            centerLayout.addWidget(self.tableListGroupBox)
            centerLayout.addLayout(centerBottomLayout)


            mainLayout.addLayout(leftLayout)
            mainLayout.addLayout(centerLayout)

            #tree_init
            self.m_db = DBUtil()
            # 设置列数
            self.dataListTree.setColumnCount(2)
            self.dataListTree.setHeaderLabels(['名称','ID','SJID'])
            # 设置树形控件的列的宽度
            self.dataListTree.setColumnWidth(0, 200)
            self.dataListTree.setColumnWidth(1, 1)
            self.dataListTree.setColumnWidth(2, 1)
            self.dataListTree.hideColumn(1)
            self.dataListTree.hideColumn(2)
            # 设置根节点

            # TODO 优化3 给节点添加响应事件
            #self.subjectListTree.clicked.connect(self.onClicked)

            #self.createRightMenu()
            self.readDataListButton.clicked.connect(self.BuildZlflTree)
            self.readTableButton.clicked.connect(self.ReadDataTable)

            self.dataTableWidget.setColumnCount(4)
            self.dataTableWidget.setHorizontalHeaderLabels(['表名','表简写','表ID','数据ID'])
            self.dataTableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
            self.dataTableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
            self.dataTableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

            self.defTableButton.clicked.connect(self.TableDefine)
            self.tableBuildForm=TableBuildForm()
            self.dataManagerForm=DataManagerForm()
            self.TableBrowseButton.clicked.connect(self.DataManage)
        except Exception as e:
            print(e.Message)
    def BuildZlflTree(self,flid=""):
        try:
            self.dataListTree.clear()
            if flid==False:
                flxxs = self.m_db.GetFieldValueToStrGroupsFromDb("FLMC,FLID,SJID", "XTGLK.ZLFL_FLS", "where SJID='root' order by FLCC")
                if len(flxxs)>0:
                    flmcs=flxxs[0]
                    flids=flxxs[1]
                    sjids=flxxs[2]

                    for index in range(0,len(flmcs)):

                        root = QTreeWidgetItem(self.dataListTree)
                        root.setText(0, flmcs[index])
                        root.setText(1, flids[index])
                        root.setText(2,sjids[index])
                        # root.setIcon(0, QIcon('./images/root.png'))
                        # todo 优化2 设置根节点的背景颜色
                        brush_red = QBrush(Qt.red)
                        root.setBackground(0, brush_red)
                        brush_blue = QBrush(Qt.white)
                        root.setBackground(1, brush_blue)
                        # 加载根节点的所有属性与子控件
                        self.dataListTree.addTopLevelItem(root)
                        self.BuildSubZlflTree(flids[index],root)
            # 节点全部展开
            #self.dataListTree.expandAll()

        except Exception as e:
            print("读取科目信息时发生错误"+e.Message)

    def BuildSubZlflTree(self,sjid,parentNode):
        try:
            flxxs = self.m_db.GetFieldValueToStrGroupsFromDb("FLMC,FLID,SJID", "XTGLK.ZLFL_FLS", "where SJID='"+sjid+"' order by FLCC")
            if len(flxxs)>0:
                flmcs=flxxs[0]
                flids=flxxs[1]
                sjids=flxxs[2]

                for index in range(0,len(flmcs)):

                    child = QTreeWidgetItem(parentNode)
                    child.setText(0, flmcs[index])
                    child.setText(1, flids[index])
                    child.setText(2,sjids[index])
                    # root.setIcon(0, QIcon('./images/root.png'))
                    self.BuildSubZlflTree(flids[index],child)
        except:
            print("read data class info error!")
    def ReadDataTable(self):
        selectZlflItem=self.dataListTree.currentItem()
        if selectZlflItem==None:
            return
        flid=selectZlflItem.text(1)
        child_ids = self.ReadChildFlids(flid)
        child_ids.append(flid)
        condition = StringUtil.StringUtil.ChangeListToCondition('FLID',child_ids)
        if condition!="":
            condition=" where "+condition
            table_infos=self.m_db.GetFieldValueToStrGroupsFromDb("BMC,BJX,TBID,FLID","XTGLK.ZLFL_MSFF_TAB",condition)
            if len(table_infos) > 0:
                bmcs=table_infos[0]
                bjxs=table_infos[1]
                tbids=table_infos[2]
                flids=table_infos[3]
                if len(bmcs)>0:
                    self.dataTableWidget.setRowCount(len(bmcs))
                    for index in range(0,len(bmcs)):
                        bmc=bmcs[index]
                        bjx=bjxs[index]
                        tbid=tbids[index]
                        flid=flids[index]
                        newitem=QTableWidgetItem(bmc)
                        self.dataTableWidget.setItem(index,0,newitem)
                        newitem = QTableWidgetItem(bjx)
                        self.dataTableWidget.setItem(index, 1, newitem)
                        newitem = QTableWidgetItem(tbid)
                        self.dataTableWidget.setItem(index, 2, newitem)
                        newitem = QTableWidgetItem(flid)
                        self.dataTableWidget.setItem(index, 3, newitem)

    def ReadChildFlids(self, parentFlid):
        try:
            childFLIDs = []
            ids = self.m_db.GetFieldValueToStrListFromDb("FLID", "XTGLK.ZLFL_FLS", "where SJID='" + parentFlid + "'")
            if ids!=None and len(ids) > 0:
                for id in ids:
                    childFLIDs.append(id)
                for id in ids:
                    subIDs = self.ReadChildFlids(id)
                    if len(subIDs) > 0:
                        childFLIDs.append(subIDs)
            return childFLIDs
        except Exception as e:
            print("获取分类子节点时发生错误:" + e.Message)
    def TableDefine(self):
        try:
            selectedRow=self.dataTableWidget.currentIndex().row()
            if selectedRow==-1:
                return
            tbmc=self.dataTableWidget.item(selectedRow,0).text()
            tbjx=self.dataTableWidget.item(selectedRow, 1).text()
            tbid=self.dataTableWidget.item(selectedRow,2).text()
            self.tableBuildForm.table_init(tbid,tbmc,tbjx)
            #tbid=selectedItem.text(2)
            self.tableBuildForm.showMaximized()
        except Exception as e:
            print ("打开自定义数据表时发生错误!",e)

    def DataManage(self):
        try:
            selectedRow=self.dataTableWidget.currentIndex().row()
            if selectedRow == -1:
                return
            self.dataManagerForm = DataManagerForm()
            tbmc=self.dataTableWidget.item(selectedRow,0).text()
            tbjx=self.dataTableWidget.item(selectedRow, 1).text()
            tbid=self.dataTableWidget.item(selectedRow,2).text()
            self.dataManagerForm.data_init(tbid,tbmc,tbjx)
            #tbid=selectedItem.text(2)
            self.dataManagerForm.showMaximized()
        except Exception as e:
            print("进入数据管理模块发生错误!",e)
Пример #3
0
class DataManagerForm(QWidget):
    def __init__(self):
        super(DataManagerForm,self).__init__()
        self.initUi()
    def initUi(self):
        # 获取显示器分辨率
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.height = self.screenRect.height()
        self.width = self.screenRect.width()
        self.resize(self.width, self.height)
        self.setWindowTitle("数据管理")

        mainLayout=QVBoxLayout()
        centerLayout=QVBoxLayout()
        self.bottomLayout=QHBoxLayout()
        mainLayout.addLayout(centerLayout)
        mainLayout.addLayout(self.bottomLayout)

        self.dataTableWidget = QTableWidget()
        centerLayout.addWidget(self.dataTableWidget)

        self.m_db=DBUtil()
        self.setLayout(mainLayout)

        self.dataTableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.dataTableWidget.customContextMenuRequested.connect(self.GenerateMenu)


    def data_init(self,tbid,tbmc,tbjx):
        self.tbid=tbid
        self.tbjx=tbjx
        self.tbmc=tbmc
        self.fieldnamelist=self.m_db.GetFieldValueToStrListFromDb("ZDMC","XTGLK.ZLFL_MSFF_FIELD","where TBID='"+tbid+"' and MCJX not in('FLID','MJ','SJLY','SJSJ','LRSJ') order by SXH")
        self.fieldlist=self.m_db.GetFieldValueToStrListFromDb("MCJX","XTGLK.ZLFL_MSFF_FIELD","where TBID='"+tbid+"' and MCJX not in('FLID','MJ','SJLY','SJSJ','LRSJ') order by SXH")
        self.field_kzlx_list=self.m_db.GetFieldValueToStrListFromDb("KZLX","XTGLK.ZLFL_MSFF_FIELD","where TBID='"+tbid+"' and MCJX not in('FLID','ID','MJ','SJLY','SJSJ','LRSJ') order by SXH")
        self.field_zdlx_list = self.m_db.GetFieldValueToStrListFromDb("ZDLX", "XTGLK.ZLFL_MSFF_FIELD", "where TBID='" + tbid + "' and MCJX not in('FLID','ID','MJ','SJLY','SJSJ','LRSJ') order by SXH")
        self.link_field_list=[]
        for fieldindex in range(0,len(self.fieldlist)):
            link_field=self.m_db.GetFieldValueToSingleStrFromDb('NBGLZD','XTGLK.ZLFL_MSFF_FIELD_INFO',"where TBID='" + tbid + "' and ZDMC='"+self.fieldlist[fieldindex]+"'")
            if link_field==None:
                link_field=''
            self.link_field_list.append(link_field)
        mrzinfo_list=self.m_db.GetFieldValueToStrGroupsFromDb('ZDMC,MRZ',"XTGLK.ZLFL_MSFF_FIELD_INFO", "where TBID='" + tbid + "'")
        self.mrzd_list=mrzinfo_list[0]
        self.mrz_list=mrzinfo_list[1]
        self.fieldvalue_list=[]
        for fieldindex in range(0,len(self.fieldlist)):
            self.fieldvalue_list.append('')
        for fieldindex in range(0,len(self.fieldlist)):
            fieldname=self.fieldlist[fieldindex]
            mrzd_index=self.mrzd_list.index(fieldname)
            if mrzd_index!=None:
                mrz=self.mrz_list[mrzd_index]
                if mrz!=None:
                    self.fieldvalue_list[fieldindex]=mrz

        fieldcount=len(self.fieldnamelist)
        self.dataTableWidget.setColumnCount(fieldcount)
        self.dataTableWidget.setHorizontalHeaderLabels(self.fieldnamelist)
        self.dataTableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.dataTableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.dataTableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

        self.dataCount=self.m_db.GetRowCount("select * from "+tbjx)
        self.setWindowTitle(self.tbmc+"(共有"+str(self.dataCount)+"条记录)")
        self.rowcount_page=5
        self.page_count=self.dataCount//self.rowcount_page
        self.currentPageIndex=1
        page_rest=self.dataCount%self.rowcount_page
        if page_rest>0:
            self.page_count+=1
        self.page10_count=self.page_count//10
        page10_rest=self.page_count%10
        if page10_rest>0:
            self.page10_count+=1
        self.current_10PageIndex=1

        self.pageButton_forword=QPushButton(str("<<"))
        self.bottomLayout.addWidget(self.pageButton_forword)
        self.pageButton_forword.clicked.connect(lambda :self.readData(self.pageButton_forword))
        self.pageButton_forword.setFixedWidth(30)

        self.pageButton_first=QPushButton(str("|<"))
        self.bottomLayout.addWidget(self.pageButton_first)
        self.pageButton_first.clicked.connect(lambda :self.readData(self.pageButton_first))
        self.pageButton_first.setFixedWidth(30)

        self.pageButton_before=QPushButton(str("<"))
        self.bottomLayout.addWidget(self.pageButton_before)
        self.pageButton_before.clicked.connect(lambda :self.readData(self.pageButton_before))
        self.pageButton_before.setFixedWidth(30)


        self.pageButton1=QPushButton(str("1"))
        self.bottomLayout.addWidget(self.pageButton1)
        self.pageButton1.clicked.connect(lambda :self.readData(self.pageButton1))
        self.pageButton1.setFixedWidth(30)

        self.pageButton2=QPushButton(str("2"))
        self.bottomLayout.addWidget(self.pageButton2)
        self.pageButton2.clicked.connect(lambda :self.readData(self.pageButton2))
        self.pageButton2.setFixedWidth(30)

        self.pageButton3=QPushButton(str("3"))
        self.bottomLayout.addWidget(self.pageButton3)
        self.pageButton3.clicked.connect(lambda :self.readData(self.pageButton3))
        self.pageButton3.setFixedWidth(30)

        self.pageButton4=QPushButton(str("4"))
        self.bottomLayout.addWidget(self.pageButton4)
        self.pageButton4.clicked.connect(lambda :self.readData(self.pageButton4))
        self.pageButton4.setFixedWidth(30)

        self.pageButton5=QPushButton(str("5"))
        self.bottomLayout.addWidget(self.pageButton5)
        self.pageButton5.clicked.connect(lambda :self.readData(self.pageButton5))
        self.pageButton5.setFixedWidth(30)

        self.pageButton6=QPushButton(str("6"))
        self.bottomLayout.addWidget(self.pageButton6)
        self.pageButton6.clicked.connect(lambda :self.readData(self.pageButton6))
        self.pageButton6.setFixedWidth(30)

        self.pageButton7=QPushButton(str("7"))
        self.bottomLayout.addWidget(self.pageButton7)
        self.pageButton7.clicked.connect(lambda :self.readData(self.pageButton7))
        self.pageButton7.setFixedWidth(30)

        self.pageButton8=QPushButton(str("8"))
        self.bottomLayout.addWidget(self.pageButton8)
        self.pageButton8.clicked.connect(lambda :self.readData(self.pageButton8))
        self.pageButton8.setFixedWidth(30)

        self.pageButton9=QPushButton(str("9"))
        self.bottomLayout.addWidget(self.pageButton9)
        self.pageButton9.clicked.connect(lambda :self.readData(self.pageButton9))
        self.pageButton9.setFixedWidth(30)

        self.pageButton10=QPushButton(str("10"))
        self.bottomLayout.addWidget(self.pageButton10)
        self.pageButton10.clicked.connect(lambda :self.readData(self.pageButton10))
        self.pageButton10.setFixedWidth(30)

        self.pageButton_next=QPushButton(str(">"))
        self.bottomLayout.addWidget(self.pageButton_next)
        self.pageButton_next.clicked.connect(lambda :self.readData(self.pageButton_next))
        self.pageButton_next.setFixedWidth(30)

        self.pageButton_end=QPushButton(str(">|"))
        self.bottomLayout.addWidget(self.pageButton_end)
        self.pageButton_end.clicked.connect(lambda :self.readData(self.pageButton_end))
        self.pageButton_end.setFixedWidth(30)

        self.pageButton_backword=QPushButton(str(">>"))
        self.bottomLayout.addWidget(self.pageButton_backword)
        self.pageButton_backword.clicked.connect(lambda :self.readData(self.pageButton_backword))
        self.pageButton_backword.setFixedWidth(30)

        self.pageButtons=[self.pageButton1,self.pageButton2,self.pageButton3,self.pageButton4,self.pageButton5,self.pageButton6,self.pageButton7,self.pageButton8,self.pageButton9,self.pageButton10]

        for page_index in range(0,11):
            if self.page_count>=page_index:
                self.pageButtons[page_index-1].setEnabled(1)
            else:
                self.pageButtons[page_index-1].setEnabled(0)

        perPageLabel=QLabel("每页")
        self.perPageLineEdit=QLineEdit()
        perPageRowLabel=QLabel("行")

        self.bottomLayout.addWidget(perPageLabel)
        self.bottomLayout.addWidget(self.perPageLineEdit)
        self.bottomLayout.addWidget(perPageRowLabel)
        self.perPageLineEdit.textChanged.connect(self.RowPerPageChanged)
        self.perPageLineEdit.setText('5')

        pIntValidator=QIntValidator(self)
        pIntValidator.setRange(1,100)
        self.perPageLineEdit.setValidator(pIntValidator)
        self.perPageLineEdit.setFixedWidth(40)


        whichPageLabel=QLabel("第")
        self.whichPageComboBox=QComboBox()
        whichPageRowLabel=QLabel("页")

        self.bottomLayout.addWidget(whichPageLabel)
        self.bottomLayout.addWidget(self.whichPageComboBox)
        self.bottomLayout.addWidget(whichPageRowLabel)
        self.whichPageComboBox.currentIndexChanged.connect(self.PageSelectChanged)

        for page in range(1,self.page_count+1):
            self.whichPageComboBox.addItem(str(page))

        pIntValidator=QIntValidator(self)
        pIntValidator.setRange(1,100)
        self.perPageLineEdit.setValidator(pIntValidator)
        self.perPageLineEdit.setFixedWidth(40)

        self.addRowButton=QPushButton("添加")
        self.delRowButton=QPushButton("删除")
        self.editRowButton=QPushButton("编辑")
        self.clearRowButton=QPushButton("清空")

        self.bottomLayout.addWidget(self.addRowButton)
        self.bottomLayout.addWidget(self.editRowButton)
        self.bottomLayout.addWidget(self.delRowButton)
        self.bottomLayout.addWidget(self.clearRowButton)

        self.addRowButton.clicked.connect(self.AddNewRow)
        self.editRowButton.clicked.connect(self.EditRow)
        self.delRowButton.clicked.connect(self.DelRow)
        self.clearRowButton.clicked.connect(self.ClearRows)



    def readData(self,btn):
        try:
            self.dataTableWidget.setRowCount(0)
            page=btn.text()
            #转到上一个10页
            if page=="<<":
                self.Go_Forward()
            elif page=="|<":
                self.Go_First()
            elif page=="<":
                if self.currentPageIndex>1:
                    self.currentPageIndex-=1
                    start_page=(self.current_10PageIndex-1)*10+1
                    end_page=self.current_10PageIndex*10
                    if self.currentPageIndex<start_page:
                        self.current_10PageIndex-=1
                        start_page=(self.current_10PageIndex-1)*10+1
                        end_page=self.current_10PageIndex*10
                        for page_index in range(start_page,end_page):
                            self.pageButtons[page_index-1].setText(str(page_index))
                        for page_index in range(0,11):
                            if self.page_count>=page_index:
                                self.pageButtons[page_index-1].setEnabled(1)
                            else:
                                self.pageButtons[page_index-1].setEnabled(0)
                    self.ReadDataInPage(str(self.currentPageIndex))
            elif page==">>":
                self.Go_Backward()
            elif page==">|":
                self.Go_Last()
            elif page==">":
                if self.currentPageIndex<self.page_count:
                    self.currentPageIndex+=1
                    start_page=(self.current_10PageIndex-1)*10+1
                    end_page=self.current_10PageIndex*10
                    if self.currentPageIndex>end_page:
                        self.current_10PageIndex+=1
                        start_page=(self.current_10PageIndex-1)*10+1
                        end_page=self.current_10PageIndex*10

                        for page_index in range(start_page,end_page):
                            self.pageButtons[page_index-1].setText(str(page_index))
                        for page_index in range(0,11):
                            if self.page_count>=page_index:
                                self.pageButtons[page_index-1].setEnabled(1)
                            else:
                                self.pageButtons[page_index-1].setEnabled(0)
                    self.ReadDataInPage(str(self.currentPageIndex))
            else:
                self.ReadDataInPage(page)
        except Exception as e:
            print("读取数据发生错误",e)
    def ReadDataInPage(self,page):
        iPage=int(page)
        self.currentPageIndex=iPage
        field=','.join(self.fieldlist)
        minrow=(iPage-1)*self.rowcount_page

        maxrow=iPage*self.rowcount_page
        fieldinfo=self.m_db.GetFieldValueToStrGroupsFromDbByRange(field,self.tbjx,"",minrow,maxrow)
        if fieldinfo!=None:
            if len(fieldinfo)>0:
                if len(fieldinfo[0])>0:
                    self.dataTableWidget.setRowCount(len(fieldinfo[0]))
                    for fieldvalueindex in range(0,len(fieldinfo[0])):
                        for fieldindex in range(0,len(self.fieldlist)):
                            fieldvalues=fieldinfo[fieldindex]
                            if len(fieldvalues)>0:
                                newitem=QTableWidgetItem(str(fieldvalues[fieldvalueindex]))
                                self.dataTableWidget.setItem(fieldvalueindex,fieldindex,newitem)

    def Go_Forward(self):
        try:
            if self.page_count<=10:
                    return
            else:
                if self.page10_count-self.current_10PageIndex>0:
                    self.current_10PageIndex+=1
                    start_page=(self.current_10PageIndex-1)*10+1
                    end_page=self.current_10PageIndex*10
                    for page_index in range(start_page,end_page):
                        self.pageButtons[page_index-1].setText(str(page_index))
                    for page_index in range(0,11):
                        if self.page_count>=page_index:
                            self.pageButtons[page_index-1].setEnabled(1)
                        else:
                            self.pageButtons[page_index-1].setEnabled(0)
                else:
                    return
        except Exception as e:
            print("向前翻页发生错误!")

    def Go_Backward(self):
        try:
            if self.page_count<=10:
                    return
            else:
                if self.current_10PageIndex>1:
                    self.current_10PageIndex-=1
                    start_page=(self.current_10PageIndex-1)*10+1
                    end_page=self.current_10PageIndex*10
                    for page_index in range(start_page,end_page):
                        self.pageButtons[page_index-1].setText(str(page_index))
                    for page_index in range(0,11):
                        if self.page_count>=page_index:
                            self.pageButtons[page_index-1].setEnabled(1)
                        else:
                            self.pageButtons[page_index-1].setEnabled(0)
                else:
                    return
        except Exception as e:
            print("向前翻页发生错误!")
    def Go_Last(self):
        self.ReadDataInPage(str(self.page_count))
        self.currentPageIndex=self.page_count
        self.current_10PageIndex=self.page10_count
        start_page=(self.current_10PageIndex-1)*10+1
        end_page=self.current_10PageIndex*10

        for page_index in range(start_page,end_page):
            self.pageButtons[page_index-1].setText(str(page_index))
        for page_index in range(0,11):
            if self.page_count>=page_index:
                self.pageButtons[page_index-1].setEnabled(1)
            else:
                self.pageButtons[page_index-1].setEnabled(0)
    def Go_First(self):
        self.ReadDataInPage("1")
        self.currentPageIndex=1
        self.current_10PageIndex=1
        start_page=(self.current_10PageIndex-1)*10+1
        end_page=self.current_10PageIndex*10

        for page_index in range(start_page,end_page):
            self.pageButtons[page_index-1].setText(str(page_index))
        for page_index in range(0,11):
            if self.page_count>=page_index:
                self.pageButtons[page_index-1].setEnabled(1)
            else:
                self.pageButtons[page_index-1].setEnabled(0)
    def RowPerPageChanged(self):
        try:
            rowperpage=self.perPageLineEdit.text()
            if rowperpage!='':
                self.rowcount_page=int(self.perPageLineEdit.text())
                self.page_count=self.dataCount//self.rowcount_page
                self.currentPageIndex=1
                page_rest=self.dataCount%self.rowcount_page
                if page_rest>0:
                    self.page_count+=1
                self.page10_count=self.page_count//10
                page10_rest=self.page_count%10
                if page10_rest>0:
                    self.page10_count+=1
                self.current_10PageIndex=1
                start_page=(self.current_10PageIndex-1)*10+1
                end_page=self.current_10PageIndex*10
                for page_index in range(start_page,end_page):
                    self.pageButtons[page_index-1].setText(str(page_index))
                for page_index in range(0,11):
                    if self.page_count>=page_index:
                        self.pageButtons[page_index-1].setEnabled(1)
                    else:
                        self.pageButtons[page_index-1].setEnabled(0)
        except Exception as e:
            print("更改每页行数发生错误",e)
    def PageSelectChanged(self):
        page=self.whichPageComboBox.currentText()
        if page!='':
            self.ReadDataInPage(page)
    def AddNewRow(self):
        try:
            fieldnames=[]
            for field in self.fieldlist:
                if field!='ID':
                    fieldnames.append(field)
            rowid=self.m_db.InsertToTable_NotFullField(self.tbjx,fieldnames,self.fieldvalue_list)
            if rowid!=None or rowid!='':
                self.refreshDataInfo()
                self.Go_First()
            else:
                print("数据添加失败!")
        except Exception as e:
            print("添加数据行时发生错误!",e)
    def EditRow(self):
        try:
            selectedRow=self.dataTableWidget.currentIndex().row()
            if selectedRow==None:
                return
            fieldvalues=[]
            for fieldindex in range(0,len(self.fieldnamelist)):
                rowvalue=self.dataTableWidget.item(selectedRow,fieldindex).text()
                fieldvalues.append(rowvalue)
            self.rowEditForm=RowEditForm()
            self.rowEditForm.row_init(self.fieldnamelist,self.fieldlist,self.field_zdlx_list,fieldvalues,self.field_kzlx_list,self.tbjx,self.tbid)
            self.rowEditForm.showMaximized()

        except Exception as e:
            print("编辑数据行时发生错误!",e)
    def DelRow(self):
        try:
            selectedRow=self.dataTableWidget.currentIndex().row()
            if selectedRow==None:
                return
            rowid=self.dataTableWidget.item(selectedRow,len(self.fieldlist)-1).text()

            MESSAGE = "疑问"
            reply = QMessageBox.question(None,MESSAGE, "确认删除当前选中的数据行吗?",QMessageBox.Yes | QMessageBox.No)
            if reply == QMessageBox.Yes:
                self.m_db.UpdateTable("delete from "+self.tbjx+" where ID='"+rowid+"'")
                self.refreshDataInfo()
                self.Go_Last()

        except Exception as e:
            print("删除数据行时发生错误!",e)
    def ClearRows(self):
        try:
            MESSAGE = "疑问"
            reply = QMessageBox.question(None, "确认删除所有数据吗?",MESSAGE,QMessageBox.Yes | QMessageBox.No)
            if reply == QMessageBox.Yes:
                self.m_db.UpdateTable("delete from "+self.tbjx)
                self.refreshDataInfo()
                self.dataTableWidget.setRowCount(0)

        except Exception as e:
            print("清空数据行时发生错误!",e)
    def refreshDataInfo(self):
        self.dataCount=self.m_db.GetRowCount("select * from "+self.tbjx)
        self.setWindowTitle(self.tbmc+"(共有"+str(self.dataCount)+"条记录)")
        self.page_count=self.dataCount//self.rowcount_page
        self.currentPageIndex=1
        page_rest=self.dataCount%self.rowcount_page
        if page_rest>0:
            self.page_count+=1
        self.page10_count=self.page_count//10
        page10_rest=self.page_count%10
        if page10_rest>0:
            self.page10_count+=1
        self.current_10PageIndex=1

        for page_index in range(0,11):
            if self.page_count>=page_index:
                self.pageButtons[page_index-1].setEnabled(1)
            else:
                self.pageButtons[page_index-1].setEnabled(0)
        self.whichPageComboBox.clear()
        for page_count in range(0,self.page_count):
            self.whichPageComboBox.addItem(str(page_count+1))
    def GenerateMenu(self,pos):
        menu=QMenu()
        addMenuItem=menu.addAction(u"添加")
        editMenuItem=menu.addAction(u"编辑")
        delMenuItem=menu.addAction(u"删除")
        action=menu.exec_(self.dataTableWidget.mapToGlobal(pos))
        if action==addMenuItem:
            self.AddNewRow()
        elif action==delMenuItem:
            self.DelRow()
        elif action==editMenuItem:
            self.EditRow()
        else:
            return
Пример #4
0
class PaperManagerForm(QWidget):
    def __init__(self):
        super(PaperManagerForm, self).__init__()
        self.initUi()

    def initUi(self):
        try:
            # 获取显示器分辨率
            self.desktop = QApplication.desktop()
            self.screenRect = self.desktop.screenGeometry()
            self.height = self.screenRect.height()
            self.width = self.screenRect.width()
            self.resize(self.width, self.height)
            self.setWindowTitle("试题管理")

            #layout_init
            mainLayout = QHBoxLayout()
            self.setLayout(mainLayout)
            leftLayout = QVBoxLayout()
            self.subjectListGroupBox = QGroupBox("科目列表")
            self.subjectlistLayout = QVBoxLayout()
            self.subjectListGroupBox.setLayout(self.subjectlistLayout)
            self.subjectListTree = QTreeWidget()
            self.subjectlistLayout.addWidget(self.subjectListTree)

            self.readSubejctButton = QPushButton("读取科目")
            self.readQuestionButton = QPushButton("读取试题")
            self.dataClassButton = QPushButton("DataClss")
            leftLayout.addWidget(self.subjectListGroupBox)

            leftBottomLayout = QHBoxLayout()

            leftBottomLayout.addWidget(self.readSubejctButton)
            leftBottomLayout.addWidget(self.readQuestionButton)
            leftBottomLayout.addWidget(self.dataClassButton)
            leftLayout.addLayout(leftBottomLayout)

            centerLayout = QVBoxLayout()
            self.questionListGroupBox = QGroupBox("试题列表")
            self.questionlistLayout = QVBoxLayout()

            self.questionListGroupBox.setLayout(self.questionlistLayout)
            self.questionTable = QTableWidget()
            self.questionlistLayout.addWidget(self.questionTable)
            centerLayout.addWidget(self.questionListGroupBox)

            mainLayout.addLayout(leftLayout)
            mainLayout.addLayout(centerLayout)

            #tree_init
            self.m_db = DBUtil()
            # 设置列数
            self.subjectListTree.setColumnCount(2)
            self.subjectListTree.setHeaderLabels(['科目', 'ID'])
            # 设置树形控件的列的宽度
            self.subjectListTree.setColumnWidth(0, 150)

            # 设置根节点

            # TODO 优化3 给节点添加响应事件
            #self.subjectListTree.clicked.connect(self.onClicked)

            self.createRightMenu()
            self.readSubejctButton.clicked.connect(self.ReadSubject)
            self.readQuestionButton.clicked.connect(self.ReadQuestion)

            self.dataClassButton.clicked.connect(self.DataClassManage)
            self.dataClassForm = DataClassForm()

        except Exception as e:
            print(e.Message)

    def ReadSubject(self):
        try:
            self.subjectListTree.clear()
            kms = self.m_db.GetFieldValueToStrListFromDb(
                "SJMC", "XXFZK.SJBM", "where SJLX=1 order by SXH")
            for km in kms:
                root = QTreeWidgetItem(self.subjectListTree)
                root.setText(0, km)
                root.setText(1, km + '_root')
                # root.setIcon(0, QIcon('./images/root.png'))
                # todo 优化2 设置根节点的背景颜色
                brush_red = QBrush(Qt.red)
                root.setBackground(0, brush_red)
                brush_blue = QBrush(Qt.white)
                root.setBackground(1, brush_blue)
                # 加载根节点的所有属性与子控件
                self.subjectListTree.addTopLevelItem(root)
                self.BuildSubjectTree(km + '_root', root)
            # 节点全部展开
            self.subjectListTree.expandAll()

        except Exception as e:
            print("读取科目信息时发生错误", e.Message)

    def createRightMenu(self):
        self.subjectListTree.setContextMenuPolicy(Qt.CustomContextMenu)
        self.subjectListTree.customContextMenuRequested.connect(
            self.showRightMenu)
        self.rightMenu = QMenu(self.subjectListTree)

        addChapterMenuItem = self.rightMenu.addAction("添加科目")
        addChapterMenuItem.triggered.connect(self.AddSubjectAct)
        addChapterMenuItem = self.rightMenu.addAction("添加章节")
        addChapterMenuItem.triggered.connect(self.AddChapterAct)
        addChapterMenuItem = self.rightMenu.addAction("删除")
        addChapterMenuItem.triggered.connect(self.DelChapterAct)

    def showRightMenu(self, pos):
        try:
            self.rightMenu.exec(QCursor.pos())
            self.rightMenu.show()
        except:
            print("error")

    def AddChapterAct(self):
        selectItem = self.subjectListTree.currentItem()
        nodeID = selectItem.text(1)
        nodeText = selectItem.text(0)
        parentItem = selectItem.parent()
        while 1:
            if parentItem == None:
                break
            parentItem = selectItem.parent()
        if parentItem == None:
            km = nodeText
        else:
            km = parentItem.text(0)

        text, ok = QInputDialog.getText(None, "输入章节名称", "章节名称:",
                                        QLineEdit.Normal, "")
        if ok and text:
            bExist = self.m_db.TestDataExist(
                "select * from XXFZK.ZJ where KM='" + km + "' and MC='" +
                text + "'")
            if bExist > 0:
                QMessageBox.information(self, "添加章节", "章节已经存在",
                                        QMessageBox.Yes | QMessageBox.No)
                return
            fieldvaluelist = [text, km, nodeID]
            id = self.m_db.InsertToOracle("XXFZK.ZJ", fieldvaluelist)

            child = QTreeWidgetItem(selectItem)
            child.setText(0, text)
            child.setText(1, id)

    def AddSubjectAct(self):
        text, ok = QInputDialog.getText(None, "输入科目名称", "科目名称:",
                                        QLineEdit.Normal, "")
        if ok and text:
            #判断是否存在科目
            bExist = self.m_db.TestDataExist(
                "select * from XXFZK.SJBM where SJLX=1 and SJMC='" + text +
                "'")
            if bExist > 0:
                QMessageBox.information(self, "添加科目", "科目已经存在",
                                        QMessageBox.Yes | QMessageBox.No)
                return

            sxh = self.m_db.GetFieldValueToSingleStrFromDb(
                'max(SXH)', 'XXFZK.SJBM', 'where SJLX=1')
            if sxh == None:
                sxh = 0
            sxh += 1
            fieldvaluelist = ['1', '科目', str(sxh), text, '']
            self.m_db.InsertToOracle("XXFZK.SJBM", fieldvaluelist)

            root = QTreeWidgetItem(self.subjectListTree)
            root.setText(0, text)
            root.setText(1, text + '_root')
            # root.setIcon(0, QIcon('./images/root.png'))
            # todo 优化2 设置根节点的背景颜色
            brush_red = QBrush(Qt.red)
            root.setBackground(0, brush_red)
            brush_blue = QBrush(Qt.white)
            root.setBackground(1, brush_blue)
            # 加载根节点的所有属性与子控件
            self.subjectListTree.addTopLevelItem(root)

    def BuildSubjectTree(self, sjid, parentItem):
        try:
            zjs = self.m_db.GetFieldValueToStrGroupsFromDb(
                "MC,ID", "XXFZK.ZJ", "where SJID='" + sjid + "'")
            if len(zjs) != 0:
                mcs = zjs[0]
                ids = zjs[1]
                if len(mcs) != 0:
                    for index in range(0, len(mcs)):
                        mc = mcs[index]
                        id = ids[index]
                        # 设置子节点3
                        child = QTreeWidgetItem(parentItem)
                        child.setText(0, mc)
                        child.setText(1, id)
                        #child.setIcon(0, QIcon('./images/music.png'))
                        self.BuildSubjectTree(id, child)
        except Exception as e:
            print(e.Message)

    def DelChapterAct(self):
        try:
            selectItem = self.subjectListTree.currentItem()
            nodeID = selectItem.text(1)
            nodeText = selectItem.text(0)
            if nodeID == nodeText + "_root":
                MESSAGE = "确认删除当前的科目吗?"
                reply = QMessageBox.question(None, "QMessageBox.question()",
                                             MESSAGE,
                                             QMessageBox.Yes | QMessageBox.No)
                if reply == QMessageBox.No:
                    return
                self.m_db.UpdateTable(
                    "delete from XXFZK.SJBM where SJLX=1 and SJMC='" +
                    nodeText + "'")
                index = self.subjectListTree.indexOfTopLevelItem(selectItem)
                selectItem.takeChildren()
                self.subjectListTree.takeTopLevelItem(index)
                #删除此根节点下所有章节
                self.m_db.UpdateTable("delete from XXFZK.ZJ where KM='" +
                                      nodeText + "'")
            else:
                MESSAGE = "确认删除当前的章节吗?"
                reply = QMessageBox.question(None, "QMessageBox.question()",
                                             MESSAGE,
                                             QMessageBox.Yes | QMessageBox.No)
                if reply == QMessageBox.No:
                    return
                self.m_db.UpdateTable("delete from XXFZK.ZJ where MC='" +
                                      nodeText + "'")
                index = selectItem.parent().indexOfChild(selectItem)
                selectItem.parent().takeChild(index)
                #删除此节点下所有节点

        except Exception as e:
            print(e.Message)

    def ReadQuestion(self):
        try:
            selectItem = self.subjectListTree.currentItem()
            nodeID = selectItem.text(1)
            nodeText = selectItem.text(0)
            #获取父节点
            parentItem = selectItem.parent()
            while 1:
                if parentItem == None:
                    break
                parentItem = selectItem.parent()
            if parentItem == None:
                km = nodeText
            else:
                km = parentItem.text(0)

            child_ids = self.ReadChildIDs(nodeID)
            child_ids.append(nodeID)
            condition = StringUtil.ChangeListToCondition(child_ids)
            #if condition=="":

        except Exception as e:
            print("读取试题发生错误:" + e.Message)

    def ReadChildIDs(self, sjid):
        try:
            childIDs = []
            ids = self.m_db.GetFieldValueToStrListFromDb(
                "ID", "XXFZK.ZJ", "where SJID='" + sjid + "'")
            if len(ids) > 0:
                childIDs.append(ids)
                for id in ids:
                    subIDs = self.ReadChildIDs(id)
                    if len(subIDs) > 0:
                        childIDs.append(subIDs)
            return childIDs
        except Exception as e:
            print("获取子节点时发生错误:" + e.Message)

    def DataClassManage(self):
        self.dataClassForm.show()