?? a1.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 + -