⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b1.pyw

📁 利用python语言写的课程设计: 包括学生成绩统计
💻 PYW
📖 第 1 页 / 共 2 页
字号:
        proxyLayout = QtGui.QGridLayout()        proxyLayout.addWidget(self.proxyView, 0, 0, 1, 8)        proxyLayout.addWidget(self.filterPatternLabel, 1, 0,)        proxyLayout.addWidget(self.filterPatternLineEdit, 1, 1, 1, 7)        proxyLayout.addWidget(self.filterSyntaxLabel, 2, 0)        proxyLayout.addWidget(self.filterSyntaxComboBox, 2, 1, 1, 7)        proxyLayout.addWidget(self.filterColumnLabel, 3, 0)        proxyLayout.addWidget(self.filterColumnComboBox, 3, 1, 1, 7)        proxyLayout.addWidget(self.filterCaseSensitivityCheckBox, 4, 0, 1, 2)        proxyLayout.addWidget(self.sortCaseSensitivityCheckBox, 4, 2)        self.proxyGroupBox.setLayout(proxyLayout)        mainLayout = QtGui.QVBoxLayout()        mainLayout.addWidget(self.sourceGroupBox)        mainLayout.addWidget(self.proxyGroupBox)        self.setLayout(mainLayout)        self.setWindowTitle(u"成绩统计系统")                        #对主窗口大小标题的定义        self.resize(700, 600)        self.proxyView.sortByColumn(1, QtCore.Qt.AscendingOrder)                 #(B)上面允许了排序,这里指定排序是在列排序,而且默认是ascendingOrder(上升序列)        self.filterColumnComboBox.setCurrentIndex(1)                             #设filtercombo默认是index为1,是对栏的那个combo的默认是index为1,也就是对subject进行排序        self.filterPatternLineEdit.setText("")                              #设开始查询的是 Andy|Grace,这是个正则表达式        self.filterCaseSensitivityCheckBox.setChecked(True)                   #把这个都设了checked的符号        self.sortCaseSensitivityCheckBox.setChecked(True)    def setSourceModel(self, model):                                          #设置,源model,(传入的参数是一个model),这个函数在哪被调用了呢?        self.proxyModel.setSourceModel(model)                                 #调用,QSortFilterProxyModel里面的setSourceModel的方法(并使用函数传入的model)        self.sourceView.setModel(model)                                       #调用,QTreeView的setModel方法(使用传入,model)    def filterRegExpChanged(self):                                            #建立匹配的表达式变化的函数        syntax_nr, _ = self.filterSyntaxComboBox.itemData(            self.filterSyntaxComboBox.currentIndex()).toInt()        syntax = QtCore.QRegExp.PatternSyntax(syntax_nr)                if self.filterCaseSensitivityCheckBox.isChecked():            caseSensitivity = QtCore.Qt.CaseSensitive                                                     #因为对于filter敏感,用一个if判断,当checked了(就是为真了),case sensitive就是大小写敏感        else:            caseSensitivity = QtCore.Qt.CaseInsensitive                                             #如果没有点就是,大小写不敏感的        regExp = QtCore.QRegExp(            self.filterPatternLineEdit.text(), caseSensitivity, syntax)        self.proxyModel.setFilterRegExp(regExp)           def filterColumnChanged(self):        self.proxyModel.setFilterKeyColumn(self.filterColumnComboBox.currentIndex())        #还是在那个model里面的有一个方法,就是关键的栏,设一下就指定到那个栏了        #就是将combobox的索引对应着那个栏就行了    def sortChanged(self):                                            #排序时候的大小写敏感的设定,check了为真了就是toggled了就设大小写铭感的        if self.sortCaseSensitivityCheckBox.isChecked():            caseSensitivity = QtCore.Qt.CaseSensitive        else:            caseSensitivity = QtCore.Qt.CaseInsensitive        self.proxyModel.setSortCaseSensitivity(caseSensitivity)       #在这里设sort的casesensitivity的时候 传参是一个指向方法的,参数的方法也有用了    def classOverall(self):        a =(88.4+77.8+77.1+81+91)/5        self.classOverallLineEdit.setText("%f" % a)        return None            def insertScore(self):                model.insertRow(0)                #self.proxyModel.setSourceModel(model) def addScore(model, name=None, ide=None, avr=None,             mid=None,fin=None,stu=None,lev=None):                      #定义有6个参数的方法,    model.insertRow(0)                                                                     #插入row为0的行就是从最上面的一行开始插入    model.setData(model.index(0, 0), QtCore.QVariant(name))                                #为行为0的index开始插入,相应的数据,#QVariant对string什么的,都直接显现值的,如果有color就要value的,文档规定的)    model.setData(model.index(0, 1), QtCore.QVariant(ide))       model.setData(model.index(0, 2), QtCore.QVariant(avr))    model.setData(model.index(0, 3), QtCore.QVariant(mid))    model.setData(model.index(0, 4), QtCore.QVariant(fin))    model.setData(model.index(0, 5), QtCore.QVariant(stu))    model.setData(model.index(0, 6), QtCore.QVariant(lev))        #QVariant:QVariant::QVariant ( const QString & val )    #Constructs a new variant with a string value, val. ,用这个变型来传,就而不是直接传,这个也是有意思的    def createScoreModel(parent):                                                                 #注意这个函数传入的是一个父类,因为它们不是Window类中的,所以要继承那个父类    global model    model = QtGui.QStandardItemModel(0, 7, parent)        model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant(u"姓名"))                            #就是在设horizonal的标题数据,这样用来显示的    model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant(u"学号"))    model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant(u"平时成绩"))    model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant(u"期中成绩"))    model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant(u"期末成绩"))    model.setHeaderData(5, QtCore.Qt.Horizontal, QtCore.QVariant(u"学生总评"))    model.setHeaderData(6, QtCore.Qt.Horizontal, QtCore.QVariant(u"成绩等级"))        addScore(model, u"钱敏明", "B06040622",80,90,100,80*0.3+90*0.3+100*0.4,"A")    addScore(model, u"钱林华", "B06040623",70,80,90,70*0.3+80*0.3+90*0.4,"B")    addScore(model, u"夏耀峰", "B06040624",75,94,66,75*0.3+94*0.3+66*0.4,"C")    addScore(model, u"黄茂云", "B06040625",80,78,76,80*0.3+78*0.3+76*0.4,"C")    addScore(model, u"其他人", "B060406XX",77,87,98,77*0.3+87*0.3+98*0.4,"B")        #是调用的addMail的方法,第一是传入这里建的model,同时有三个变量,本来是0行3列,addMal里面是有插入的,所以是可以运行的    #data虽然有用,隔开,但是最后的都是输入data的范围的    return model    #这里ruturn的意义是什么呢,不return的话就什么都不出现了,这样是没有意义的。一个名字空间,就是一个动作的执行了,这里比较麻烦    #这样就怎么提取这个model而不用再讲creatScoreModel再执行一次呢,这个有点麻烦啊 app = QtGui.QApplication(sys.argv)window = Window()window.setSourceModel(createScoreModel(window))#这里设置了sourceModel就是我们创建的以window()为父类的model,调用的createMailModel的方法,setSourceModel就是他的一个函数#所以是直接可以被调用的,如果用读取文件的方式怎么,作为这个类的调用呢window.show()sys.exit(app.exec_()) #toInt是有两个参数的(x,ture/false),所以前面赋值用个逗号间隔开两个的,        #调用itemData方法,传入函数的是目前的index,并将它转换成Int,而int的数传给syntax_nr的,这样很好        #return的是data for the given role  QVariant QComboBox.itemData (self, int index, int role = Qt.UserRole)        #而默认是有Qt.UserRole输入的,返回的类型本来是个QVariant,但是为什么用个Int呢,        #答案是这里传回的的确是一个 Int型的 数字#这是一个对象的创建,动作是对Returns the syntax used by the regular expression. The default is QRegExp.RegExp.(syntax语法)返回默认RegExp的语法(而为什么传syntax_nr的参数呢)        #而syntax是一个序号呢,是从combo里面得到的呢,难道这里的PatternSyntax输入的数字是与RegExp,wildcard,fixedstring有关的        #是有关的RegExp是0,WildCard是1,FixedString是2,所以传入了一个数字就行了           #一个名字空间,指向的是,QRegExp.__init__ (self, QString pattern, Qt.CaseSensitivity cs = Qt.CaseSensitive, PatternSyntax syntax = QRegExp.RegExp)        #第一个参数,字符串的部分,第二个是大小写敏感,是用的上面caseSensitivity的名字空间指向的类容,syntax的名字空间是,一个PatternSyntax方法,这个方法有个(syntax_nr)参数        #这个的意思很好玩了,而第三个是方法,就是RegExp,wildcard,fixedstring其中的一个,但是是个整体要写出来的 #调用其中的Qsortfilterproxymodel中的方法,传入的是regExp名字空间代表的,表示了一种的方法的        #意思就是 设置 匹配 规律的 表达式 (regexp)是一个只低昂哈哦的QRegExp的方法了,传进去就是设定好了,是为,这个SortFilteProxyModel的一个方法#今天遇到的第三个model,标准项目model,第一个是rows,第二个是columns,和父类    #这里的父类是Window类,就是我们自己建的类    #这又是创建了一个名字空间    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -