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

📄 b2.pyw

📁 利用python语言写的课程设计: 包括学生成绩统计
💻 PYW
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/env python# -*- coding: cp936 -*-import 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.sourceGroupBox = QtGui.QGroupBox(u"话费原始模块")  #设置box的名字,没关系        self.proxyGroupBox = QtGui.QGroupBox(u"话费查找模块")        self.sourceView = QtGui.QTreeView()             #建立资源的树形目录          self.sourceView.setRootIsDecorated(False)       #要不要显示根目录的,false是不要        self.sourceView.setAlternatingRowColors(True)   #两行要不要用不同的颜色显示的        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.feeButton = QtGui.QPushButton(u"计算话费")        self.quitButton=QtGui.QPushButton(u"退出")        self.callCheckButton = QtGui.QPushButton(u"话单查询")                        self.sortCaseSensitivityCheckBox = QtGui.QCheckBox("Case sensitive sorting")    #创建了一个QCheckBox对象,还没有定义动作,定义了名字        self.filterCaseSensitivityCheckBox = QtGui.QCheckBox("Case sensitive filter")   #同上        self.filterPatternLineEdit = QtGui.QLineEdit()                        #创建了一个单行输入的        self.filterPatternLabel = QtGui.QLabel(u"查询字段:")            #创建一个label对象,写上名字        self.filterPatternLabel.setBuddy(self.filterPatternLineEdit)          #这里设置了伙伴?有什么用处呢, 显现的是:如果将它去掉,则会显示&符号的。        self.filterSyntaxComboBox = QtGui.QComboBox()                         #建立一个下拉表单对象        self.filterSyntaxComboBox.addItem(u"正则表达式", QtCore.QVariant(QtCore.QRegExp.RegExp))        #给该对象加上item, 名字是,,addItem,是        #QComboBox.addItem (self, QString atext, QVariant auserData = QVariant()),        #包含一个指定的userData(保存在Qt.UserRole里的)        #QRegExp提供部分匹配用有规律的表达式        self.filterSyntaxComboBox.addItem("Wildcard", QtCore.QVariant(QtCore.QRegExp.Wildcard))        #很明显,这里的Wildcard和RegExp都是关键的字,是QRegExp里面的,所以是不能变动的,wildcard是指用通配符匹配        self.filterSyntaxComboBox.addItem("Fixed string", QtCore.QVariant(QtCore.QRegExp.FixedString))        #fixedstring是指用的是,固定字符串        self.filterSyntaxLabel = QtGui.QLabel("Filter &syntax:")        #前面加上标签        self.filterSyntaxLabel.setBuddy(self.filterSyntaxComboBox)        #将标签设为伙伴        self.filterColumnComboBox = QtGui.QComboBox()        #建一个combobox对象        self.filterColumnComboBox.addItem(u"按姓名查询")        #加上项目,共三个        self.filterColumnComboBox.addItem(u"按主叫电话号码查询")        self.filterColumnComboBox.addItem(u"按被叫电话号码查询")        self.filterColumnLabel = QtGui.QLabel(u"查询方式:")        #加上lable        self.filterColumnLabel.setBuddy(self.filterColumnComboBox)        #设置伙伴        self.connect(self.filterPatternLineEdit,                QtCore.SIGNAL('textChanged(const QString &)'),                self.filterRegExpChanged)                          #对象,line输入端,信号,它的文本的变化,槽,filterRegExpChanged的函数        self.connect(self.filterSyntaxComboBox,                QtCore.SIGNAL('currentIndexChanged(int)'),                self.filterRegExpChanged)                          #对象,comboBox,变化,index的变化,(int型的返回),还是跟表达式函数链接,怎么两个都链接到一个函数呢        self.connect(self.filterColumnComboBox,                QtCore.SIGNAL('currentIndexChanged(int)'),                      self.filterColumnChanged)                          #对于,下一个combobox,槽变成了,filtercolumnchanged()说明是栏变化了,        self.connect(self.filterCaseSensitivityCheckBox,                QtCore.SIGNAL('toggled(bool)'),                self.filterRegExpChanged)                          #当被,选定后,也是指向filter函数的槽        self.connect(self.sortCaseSensitivityCheckBox,                 QtCore.SIGNAL('toggled(bool)'),                self.sortChanged)                                  #指向的是sortchanged函数        self.connect(self.feeButton,                QtCore.SIGNAL('clicked()'),                self.allFee)        self.connect(self.quitButton,                QtCore.SIGNAL('clicked()'),                self.close)        self.connect(self.callCheckButton,                QtCore.SIGNAL('clicked()'),                self.resetModel)                               proxyLayout = QtGui.QGridLayout()        proxyLayout.addWidget(self.filterColumnLabel, 0, 0,)        proxyLayout.addWidget(self.filterColumnComboBox, 0, 1, 1, 3)        proxyLayout.addWidget(self.callCheckButton,0,4,1,2)                proxyLayout.addWidget(self.filterPatternLabel, 1, 0)        proxyLayout.addWidget(self.filterPatternLineEdit, 1, 1, 1, 3)        proxyLayout.addWidget(self.feeButton,1,4,1,1)        proxyLayout.addWidget(self.quitButton,1,5,1,1)                proxyLayout.addWidget(self.proxyView, 2, 0, 1, 6)        self.proxyGroupBox.setLayout(proxyLayout)        sourceLayout = QtGui.QHBoxLayout()                         #下面是对layout的指定,就是这样的                                     sourceLayout.addWidget(self.sourceView)        self.sourceGroupBox.setLayout(sourceLayout)        mainLayout = QtGui.QVBoxLayout()        mainLayout.addWidget(self.proxyGroupBox)        mainLayout.addWidget(self.sourceGroupBox)        self.setLayout(mainLayout)        self.setWindowTitle(u"通信计费系统")                        #对主窗口大小标题的定义        self.resize(800, 600)        self.proxyView.sortByColumn(1, QtCore.Qt.AscendingOrder)              #(B)上面允许了排序,这里指定排序是在列排序,而且默认是ascendingOrder(上升序列)        self.filterColumnComboBox.setCurrentIndex(0)                          #设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()        #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型的 数字        syntax = QtCore.QRegExp.PatternSyntax(syntax_nr)        #这是一个对象的创建,动作是对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,所以传入了一个数字就行了                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)        #一个名字空间,指向的是,QRegExp.__init__ (self, QString pattern, Qt.CaseSensitivity cs = Qt.CaseSensitive, PatternSyntax syntax = QRegExp.RegExp)        #第一个参数,字符串的部分,第二个是大小写敏感,是用的上面caseSensitivity的名字空间指向的类容,syntax的名字空间是,一个PatternSyntax方法,这个方法有个(syntax_nr)参数        #这个的意思很好玩了,而第三个是方法,就是RegExp,wildcard,fixedstring其中的一个,但是是个整体要写出来的                self.proxyModel.setFilterRegExp(regExp)        #调用其中的Qsortfilterproxymodel中的方法,传入的是regExp名字空间代表的,表示了一种的方法的        #意思就是 设置 匹配 规律的 表达式 (regexp)是一个只低昂哈哦的QRegExp的方法了,传进去就是设定好了,是为,这个SortFilteProxyModel的一个方法    def filterColumnChanged(self):        self.proxyModel.setFilterKeyColumn(self.filterColumnComboBox.currentIndex()*2)                #还是在那个model里面的有一个方法,就是关键的栏,设一下就指定到那个栏了

⌨️ 快捷键说明

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