Qyolk I - widżety list w PyQT4
14 July 2008
Comments
W QT4 i PyQT4 mamy trzy widżety służące do kolekcjonowania wpisów (listy) - List View będący zwykłą listą, Tree View czyli widok drzewa i Table View czyli tabela. Te trzy widgety dostępne są dla frameworka kolekcji (Model Based) oraz jako zwykłe widżety (Item Based). My zajmiemy się tym drugim typem - zwykłymi widżetami. W QTDesignerze trzeba uważać, który typ się wybiera, gdyż ma to duży wpływ na aplikację:
Dla przykładu użyłem Tree Widget. Przy kliknięciu prawym klawiszem myszy nad widgetem wyświetli się menu wraz z opcją "Edit Items" co pozwoli nam dodać kolumny (podobnie w pozostałych dwóch). O czym musimy pamiętać, to że kolumny dostają numery od zera. Jest to ważne, gdyż po tych numerach będziemy mogli operować na danej kolumnie:
Przeglądając dokumentację QTreeWidget trzeba też zajżeć do dziedziczonej klasy QTreeView.QYolk
Na cheeseshop pojawił się niedawno aplikacja o nazwie Yolk ułatwiająca przeglądanie modułów Pythona zainstalowanych za pomocą easy_install z setuptools. Instalujemy go poleceniem:easy_install yolk
A po tym możemy wydać polecenie:
yolk -l
By wyświetlić listę zainstalowanych pakietów. Naszym celem będzie zrobienie takiej samej listy w PyQT4. Dane zapewni nam poniższy kod:
from yolk import yolklib
packages = yolklib.Distributions()
for pkg in packages.get_distributions('all'):
print pkg[0]
print pkg[1]
print '#####'
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from qyolk import Ui_QYolk
from yolk import yolklib
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_QYolk()
self.ui.setupUi(self)
# set the widths of the columns
self.ui.treeList.setColumnWidth(0,200)
self.ui.treeList.setColumnWidth(1,100)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
a = QtGui.QTreeWidgetItem(self.ui.treeList)
a.setText(0, 'a')
a.setText(1, 'b')
a.setText(2, 'c')
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from qyolk import Ui_QYolk
from yolk import yolklib
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_QYolk()
self.ui.setupUi(self)
# set the widths of the columns
self.ui.treeList.setColumnWidth(0,200)
self.ui.treeList.setColumnWidth(1,100)
# generator which retuns list of installed packages
packages = yolklib.Distributions()
for pkg in packages.get_distributions('all'):
a = QtGui.QTreeWidgetItem(self.ui.treeList)
pk = str(pkg[0]).split(' ')
if pkg[1]:
status = 'Active'
else:
status = 'Not Active'
a.setText(0, pk[0])
a.setText(1, pk[1])
a.setText(2, status)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from qyolk import Ui_QYolk
from yolk import yolklib
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_QYolk()
self.ui.setupUi(self)
# set the widths of the columns
self.ui.treeList.setColumnWidth(0,200)
self.ui.treeList.setColumnWidth(1,100)
# generator which retuns list of installed packages
packages = yolklib.Distributions()
for pkg in packages.get_distributions('all'):
a = QtGui.QTreeWidgetItem(self.ui.treeList)
pk = str(pkg[0]).split(' ')
if pkg[1]:
status = 'Active'
else:
status = 'Not Active'
a.setTextColor(0, QtGui.QColor(128, 128, 128))
a.setTextColor(1, QtGui.QColor(128, 128, 128))
a.setTextColor(2, QtGui.QColor(128, 128, 128))
a.setText(0, pk[0])
a.setText(1, pk[1])
a.setText(2, status)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
Źródła
Pobierz źródła
RkBlog
Comment article