PyQt开发(二)

来源:互联网 发布:淘宝卖家不发货 编辑:程序博客网 时间:2024/06/07 06:00

设计小窗口用QWidget,主要活用一个东西:QGridLayout.
用法代码可以直观看到

class courseWindow(QWidget):    def __init__(self,parent=None):        self.ClassBasicStatis=EDXdata.BasicStatis()        self.Main1=MainWindow()        QtGui.QWidget.__init__(self, parent)        self.proxyModel = QtGui.QSortFilterProxyModel()          #(A)QSortFilterProxyModel提供从其他的model和view排序,过滤的操作,这是一个model来的        self.proxyModel.setDynamicSortFilter(True)               # 动态的将两表关联起来,后者去关联前者        self.studentDataBox = QtGui.QGroupBox(u"学生基本数据展示")  #设置box的名字,没关系        self.courseDataBox = QtGui.QGroupBox(u"课程统计")        self.featureBox=QtGui.QGroupBox(u"特征行为统计")        self.studentDistribute=QtGui.QGroupBox(u"学生单一统计在课程中的分布")#第一个盒子:学生基本数据展示        sourceLayout = QtGui.QGridLayout()                         #下面是对layout的指定,就是这样的,layout的意思是布局#插入button与表格        # print str(Main1.filename[0])        self.table=QTableWidget()        self.courseID = QtGui.QLineEdit()                        #创建了一个单行输入的        self.seeklable = QtGui.QLabel(u"请输入课程ID:")            #创建一个label对象,写上名字        self.seeklable.setBuddy(self.courseID)          #这里设置了伙伴?有什么用处呢, 显现的是:如果将它去掉,则会显示&符号的。        check=QtGui.QPushButton(u'查询')        self.connect(check, QtCore.SIGNAL('clicked()'), self.DisplayStudentData)        pushbutton0=QtGui.QPushButton('<---',self)        self.connect(pushbutton0, QtCore.SIGNAL('clicked()'), self.returnMain)        sourceLayout.addWidget(pushbutton0,0,0,1,1)        sourceLayout.addWidget(self.seeklable,1,0,1,2)        sourceLayout.addWidget(self.courseID,1,2,1,1)        sourceLayout.addWidget(check,1,6,1,1)        sourceLayout.addWidget(self.table,3,0,1,8)        self.studentDataBox.setLayout(sourceLayout)#第二个盒子:课程总体统计        courseLayout = QtGui.QGridLayout()#插入button与表格        self.table2=QTableWidget()        figureDisplay0=QtGui.QPushButton(u'课程行为统计')        figureDisplay1=QtGui.QPushButton(u'总体可视化')        figureDisplay2=QtGui.QPushButton(u'平均可视化')        figureDisplay3=QtGui.QPushButton(u'对比显示')        self.connect(figureDisplay1,QtCore.SIGNAL('clicked()'),self.plotVisual)        self.connect(figureDisplay2,QtCore.SIGNAL('clicked()'),self.average)        self.connect(figureDisplay3,QtCore.SIGNAL('clicked()'),self.comparison)        self.connect(figureDisplay0,QtCore.SIGNAL('clicked()'),self.DisplayCourseAct)        courseLayout.addWidget(self.table2,0,0,5,5)        courseLayout.addWidget(figureDisplay0,0,6,1,1)        courseLayout.addWidget(figureDisplay1,1,6,1,1)        courseLayout.addWidget(figureDisplay2,2,6,1,1)        courseLayout.addWidget(figureDisplay3,3,6,1,1)        self.courseDataBox.setLayout(courseLayout)#第三个盒子,特征行为统计        self.featureDisLayout=QtGui.QGridLayout()#插入表格        self.table03=QTableWidget()# #插入button与控件        self.featureGrade=QComboBox()        self.featureGrade.addItems(['grade:A','grade:B','grade:C','grade:D','not get score','get certi','not certi','explore study','not explore'])        figureDisplay6=QtGui.QPushButton(u'添加信息')        figureDisplay9=QtGui.QPushButton(u'单一信息统计')        figureDisplay10=QtGui.QPushButton(u'综合信息统计')        figureDisplay11=QtGui.QPushButton(u'单一信息可视化')        figureDisplay12=QtGui.QPushButton(u'综合信息可视化')        figureDisplay5=QtGui.QPushButton(u'特征统计')        figureDisplay7=QtGui.QPushButton(u'特征可视化')        self.connect(figureDisplay5,QtCore.SIGNAL('clicked()'),self.gradeStatis)        self.connect(figureDisplay7,QtCore.SIGNAL('clicked()'),self.featurecomparison)        self.connect(figureDisplay6,QtCore.SIGNAL('clicked()'),self.addInfo)        self.connect(figureDisplay9,QtCore.SIGNAL('clicked()'),self.infoSta)        self.connect(figureDisplay10,QtCore.SIGNAL('clicked()'),self.InteInfoSta)        self.connect(figureDisplay11,QtCore.SIGNAL('clicked()'),self.InfoVisualise)        self.connect(figureDisplay12,QtCore.SIGNAL('clicked()'),self.InteInfoVisualise)#布局        self.featureDisLayout.addWidget(self.featureGrade,0,0,1,1)        self.featureDisLayout.addWidget(figureDisplay5,0,7,1,1)        self.featureDisLayout.addWidget(figureDisplay7,1,7,1,1)        self.featureDisLayout.addWidget(figureDisplay6,2,7,1,1)        self.featureDisLayout.addWidget(figureDisplay9,3,7,1,1)        self.featureDisLayout.addWidget(figureDisplay11,4,7,1,1)        self.featureDisLayout.addWidget(figureDisplay10,5,7,1,1)        self.featureDisLayout.addWidget(figureDisplay12,6,7,1,1)        self.featureDisLayout.addWidget(self.table03,1,0,7,7)        self.featureBox.setLayout(self.featureDisLayout)#第四个盒子,学生单一特征在总体中分布        courseScatter=QtGui.QGridLayout()        self.table3=QTableWidget()        Distribute=QtGui.QPushButton(u'分布')        self.feature=QComboBox()        self.feature.addItems(['studytime','registered','viewed','explored','certified','grade','nevents','studytime','ndays_act','nplay_video','nchapters','nforum_posts'])        self.connect(Distribute, QtCore.SIGNAL('clicked()'), self.courseScatterDisplay)        figureDisplay=QtGui.QPushButton(u'图表展示')        self.connect(figureDisplay,QtCore.SIGNAL('clicked()'),self.plotScatter)        courseScatter.addWidget(self.feature,0,0,1,1)        courseScatter.addWidget(self.table3,1,0,5,5)        courseScatter.addWidget(Distribute,1,6,1,1)        courseScatter.addWidget(figureDisplay,2,6,1,1)        self.studentDistribute.setLayout(courseScatter)        # self.figureView = QtGui.QTreeView()             #建立资源的树形目录        # self.figureView.setRootIsDecorated(False)       #要不要显示根目录的,false是不要        # self.figureView.setAlternatingRowColors(True)   #两行要不要用不同的颜色显示的        # figureLayout=QtGui.QGridLayout()        # self.connect(figureDisplay,QtCore.SIGNAL('clicked()'),self.plot)        # figure=self.plot()        # # figureLayout.addWidget(self.figureView, 0, 0, 1, 8)        # self.figureBox.setLayout(figureLayout)        mainLayout = QtGui.QVBoxLayout()        mainLayout.addWidget(self.studentDataBox)        mainLayout.addWidget(self.courseDataBox)        mainLayout.addWidget(self.featureBox)        mainLayout.addWidget(self.studentDistribute)        self.setLayout(mainLayout)        self.setWindowTitle(u"课程统计")                        #对主窗口大小标题的定义        self.resize(900, 700)#button连接部分    def DisplayStudentData(self):        self.courseBasicData=self.ClassBasicStatis.actDistribution(str(self.courseID.text()))        self.table.setColumnCount(8)        self.table.setRowCount(len(self.courseBasicData)+1)        self.table.setItem(0,0,QTableWidgetItem(self.tr("studentID")))        self.table.setItem(0,1,QTableWidgetItem(self.tr("studytime")))        self.table.setItem(0,2,QTableWidgetItem(self.tr("grade")))        self.table.setItem(0,3,QTableWidgetItem(self.tr("nevents")))        self.table.setItem(0,4,QTableWidgetItem(self.tr("act_days")))        self.table.setItem(0,5,QTableWidgetItem(self.tr("nplay_video")))        self.table.setItem(0,6,QTableWidgetItem(self.tr("nchapters")))        self.table.setItem(0,7,QTableWidgetItem(self.tr("posts")))        for i in range(0,len(self.courseBasicData)):            for j in range(0,len(self.courseBasicData[0])):                studentdata=QTableWidgetItem(str(self.courseBasicData[i][j]))                self.table.setItem(i+1,j,studentdata)    def DisplayCourseAct(self):        self.courseData=self.ClassBasicStatis.courseIDstatic(str(self.Main1.filename[0]),str(self.courseID.text()))        self.averCourseData=self.ClassBasicStatis.averStatis(self.courseData)        self.table2.setColumnCount(len(self.courseData)+1)        self.table2.setRowCount(3)        self.table2.setItem(0,0,QTableWidgetItem('datalabel'))        self.table2.setItem(1,0,QTableWidgetItem('total'))        self.table2.setItem(2,0,QTableWidgetItem('average'))        courseStatic=[]        num=[]        averNum=[]        for i in self.courseData.iterkeys():            num.append(QTableWidgetItem(str(self.courseData.get(i))))            averNum.append(QTableWidgetItem(str(self.averCourseData.get(i))))            courseStatic.append(QTableWidgetItem(i))        for j in range(0,len(self.courseData)):            self.table2.setItem(0,j+1,courseStatic[j])            self.table2.setItem(1,j+1,num[j])            self.table2.setItem(2,j+1,averNum[j])    def courseScatterDisplay(self):        self.studentDistribute=self.ClassBasicStatis.coursedataAllocation(str(self.Main1.filename[0]),str(self.courseID.text()),str(self.feature.currentText()))        #表格设计        studentName=[]        featureStatic=[]        self.table3.setColumnCount(len(self.studentDistribute))        self.table3.setRowCount(2)        for i in self.studentDistribute.iterkeys():            studentName.append(i)            featureStatic.append(str(self.studentDistribute.get(i)))        for j in range(0,len(self.studentDistribute)):            self.table3.setItem(0,j,QTableWidgetItem(studentName[j]))            self.table3.setItem(1,j,QTableWidgetItem(featureStatic[j]))    def  gradeStatis(self):        self.mapStatis=self.ClassBasicStatis.featureStatis(str(self.Main1.filename[0]),str(self.courseID.text()),str(self.featureGrade.currentText()))        self.averMapStatis=self.ClassBasicStatis.averStatis(self.mapStatis)        self.table03.setColumnCount(len(self.mapStatis)+1)        self.table03.setRowCount(3)        self.table03.setItem(0,0,QTableWidgetItem('datalabel'))        self.table03.setItem(1,0,QTableWidgetItem('total'))        self.table03.setItem(2,0,QTableWidgetItem('average'))        courseStatic=[]        num=[]        averNum=[]        for i in self.mapStatis.iterkeys():            num.append(QTableWidgetItem(str(self.mapStatis.get(i))))            averNum.append(QTableWidgetItem(str(self.averMapStatis.get(i))))            courseStatic.append(QTableWidgetItem(i))        for j in range(0,len(self.mapStatis)):            self.table03.setItem(0,j+1,courseStatic[j])            self.table03.setItem(1,j+1,num[j])            self.table03.setItem(2,j+1,averNum[j])    def addInfo(self):        self.info0=self.ClassBasicStatis.getInfo(str(self.Main1.filename[0]))[0]        self.info1=self.ClassBasicStatis.getInfo(str(self.Main1.filename[0]))[1]        self.info2=self.ClassBasicStatis.getInfo(str(self.Main1.filename[0]))[2]        self.info3=self.ClassBasicStatis.getInfo(str(self.Main1.filename[0]))[3]        self.information0=QComboBox()        self.information0.addItems(self.info0)        self.information1=QComboBox()        self.information1.addItems(self.info1)        self.information2=QComboBox()        self.information2.addItems(self.info2)        self.information3=QComboBox()        self.information3.addItems(self.info3)        self.info = QtGui.QLabel(u"单一信息:")            #创建一个label对象,写上名字        self.information4=QComboBox()        self.information4.addItems(self.info0)        self.information4.addItems(self.info1)        self.information4.addItems(self.info2)        self.information4.addItems(self.info3)        self.featureDisLayout.addWidget(self.information0,0,1,1,1)        self.featureDisLayout.addWidget(self.information1,0,2,1,1)        self.featureDisLayout.addWidget(self.information2,0,3,1,1)        self.featureDisLayout.addWidget(self.information3,0,4,1,1)        self.featureDisLayout.addWidget(self.info,0,5,1,1)        self.featureDisLayout.addWidget(self.information4,0,6,1,1)    def infoSta(self):        self.mapInfoStatis=self.ClassBasicStatis.infoStatis(str(self.Main1.filename[0]),str(self.courseID.text()),str(self.information4.currentText()))        self.averInfoMapStatis=self.ClassBasicStatis.averStatis(self.mapInfoStatis)        self.table03.setColumnCount(len(self.mapInfoStatis)+1)        self.table03.setRowCount(3)        self.table03.setItem(0,0,QTableWidgetItem('datalabel'))        self.table03.setItem(1,0,QTableWidgetItem('total'))        self.table03.setItem(2,0,QTableWidgetItem('average'))        courseStatic=[]        num=[]        averNum=[]        for i in self.mapInfoStatis.iterkeys():            num.append(QTableWidgetItem(str(self.mapInfoStatis.get(i))))            averNum.append(QTableWidgetItem(str(self.averInfoMapStatis.get(i))))            courseStatic.append(QTableWidgetItem(i))        for j in range(0,len(self.mapInfoStatis)):            self.table03.setItem(0,j+1,courseStatic[j])            self.table03.setItem(1,j+1,num[j])            self.table03.setItem(2,j+1,averNum[j])    def InteInfoSta(self):        self.mapInfoStatis2=self.ClassBasicStatis.InteInfoStatis(str(self.Main1.filename[0]),str(self.courseID.text()),str(self.information0.currentText()),str(self.information1.currentText()),str(self.information2.currentText()),str(self.information3.currentText()))        self.averInfoMapStatis2=self.ClassBasicStatis.averStatis(self.mapInfoStatis2)        self.table03.setColumnCount(len(self.mapInfoStatis2)+1)        self.table03.setRowCount(3)        self.table03.setItem(0,0,QTableWidgetItem('datalabel'))        self.table03.setItem(1,0,QTableWidgetItem('total'))        self.table03.setItem(2,0,QTableWidgetItem('average'))        courseStatic=[]        num=[]        averNum=[]        for i in self.mapInfoStatis2.iterkeys():            num.append(QTableWidgetItem(str(self.mapInfoStatis2.get(i))))            averNum.append(QTableWidgetItem(str(self.averInfoMapStatis2.get(i))))            courseStatic.append(QTableWidgetItem(i))        for j in range(0,len(self.mapInfoStatis2)):            self.table03.setItem(0,j+1,courseStatic[j])            self.table03.setItem(1,j+1,num[j])            self.table03.setItem(2,j+1,averNum[j])    def returnMain(self):        self.mainWin=MainWindow()        self.hide()        self.mainWin.show()#可视化部分    def InfoVisualise(self):        self.ClassBasicStatis.ComparVisualiseStudentData(self.mapInfoStatis,self.averInfoMapStatis)    def InteInfoVisualise(self):        self.ClassBasicStatis.ComparVisualiseStudentData(self.mapInfoStatis2,self.averInfoMapStatis2)    def average(self):        self.ClassBasicStatis.visualiseStudentData(self.averCourseData)    def featureaverage(self):        self.ClassBasicStatis.visualiseStudentData(self.averMapStatis)    def comparison(self):        self.ClassBasicStatis.ComparVisualiseStudentData(self.courseData,self.averCourseData)    def featurecomparison(self):        self.ClassBasicStatis.ComparVisualiseStudentData(self.mapStatis,self.averMapStatis)    def featureplotVisual(self):        self.ClassBasicStatis.visualiseStudentData(self.mapStatis)    def plotVisual(self):        self.ClassBasicStatis.visualiseStudentData(self.courseData)    def plotScatter(self):        self.ClassBasicStatis.scatterplot(self.studentDistribute)

自己的代码包含的东西有点多。因为数据包含的信息有不少可以收集整理的。
上述代码的页面

0 0
原创粉丝点击