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

📄 a1.pyw

📁 利用python语言写的课程设计: 包括学生成绩统计
💻 PYW
字号:
#!/usr/bin/env python# -*- coding: cp936 -*-from __future__ import divisionimport sysfrom PyQt4 import QtCore, QtGuiclass Window(QtGui.QWidget):    def __init__(self):        QtGui.QWidget.__init__(self)        self.proxyModel = QtGui.QSortFilterProxyModel()          #(A)QSortFilterProxyModel提供从其他的model和view排序,过滤的操作,这是一个model来的        self.proxyModel.setDynamicSortFilter(True)               # 动态的将两表关联起来,后者去关联前者         self.proxyGroupBox = QtGui.QGroupBox(u"分数排序")        self.sourceView = QtGui.QTreeView()             #建立资源的树形目录          self.sourceView.setRootIsDecorated(False)       #要不要显示根目录的,false是不要        self.sourceView.setAlternatingRowColors(True)   #两行要不要用不同的颜色显示的        self.insertButton = QtGui.QPushButton(u"插入成绩")        self.quitButton = QtGui.QPushButton(u"退出程序")                self.proxyView = QtGui.QTreeView()              #“代表”目录,创建了一个        self.proxyView.setRootIsDecorated(False)        #要不要显示根目录的,false是不要        self.proxyView.setAlternatingRowColors(True)    #两行要不要用不同的颜色显示的        self.proxyView.setModel(self.proxyModel)        #用到(A),QTreeView.setModel (self, QAbstractItemModel model),第二个treeview是与用的是proxymodel                                                        #是只有后面一个参数,传入的是一个sortfilterproxymodel,将一个具体的model传入了        self.proxyView.setSortingEnabled(True)          #这个表的排序功能,允许排序功能(B)                                   self.connect(self.quitButton,                QtCore.SIGNAL('clicked()'),                self.close)        self.connect(self.insertButton,                QtCore.SIGNAL('clicked()'),                self.insertScore)        proxyLayout = QtGui.QGridLayout()        proxyLayout.addWidget(self.proxyView, 0, 0, 1, 4)        proxyLayout.addWidget(self.insertButton,1,0,1,2)        proxyLayout.addWidget(self.quitButton,1,2,1,2)        self.proxyGroupBox.setLayout(proxyLayout)        mainLayout = QtGui.QVBoxLayout()        mainLayout.addWidget(self.proxyGroupBox)        self.setLayout(mainLayout)        self.setWindowTitle(u"分数排序系统")                                    #对主窗口大小标题的定义        self.resize(400, 300)        self.proxyView.sortByColumn(1, QtCore.Qt.AscendingOrder)              #(B)上面允许了排序,这里指定排序是在列排序,而且默认是ascendingOrder(上升序列)    def setSourceModel(self, model):                                          #设置,源model,(传入的参数是一个model),这个函数在哪被调用了呢?        self.proxyModel.setSourceModel(model)                                 #调用,QSortFilterProxyModel里面的setSourceModel的方法(并使用函数传入的model)        self.sourceView.setModel(model)                                       #调用,QTreeView的setModel方法(使用传入,model)    def insertScore(self):        model.insertRow(0) def addScore(model, name=None, optolElec=None, Laser=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))        #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, 3, 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"激光原理"))        #是调用的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_())

⌨️ 快捷键说明

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