Programming
[PyQt4] 0x06. QYolk III
__미니__
2016. 11. 18. 15:48
http://5kyc1ad.tistory.com/246 에서 만든 QYolk II에 기능을 조금 추가했다.
업데이트 탭을 추가하고 최신 버전이 아닌 패키지가 있을 경우 표시하고 몇 버전으로 업그레이드가 가능한지를 나타내었다.
[ Source ]
- Main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'Main.ui' # # Created by: PyQt4 UI code generator 4.11.4 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_QYolk(object): def setupUi(self, QYolk): QYolk.setObjectName(_fromUtf8("QYolk")) QYolk.resize(565, 345) self.centralwidget = QtGui.QWidget(QYolk) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.tab_widget = QtGui.QTabWidget(self.centralwidget) self.tab_widget.setGeometry(QtCore.QRect(10, 0, 551, 291)) self.tab_widget.setObjectName(_fromUtf8("tab_widget")) self.tab_all_packages = QtGui.QWidget() self.tab_all_packages.setObjectName(_fromUtf8("tab_all_packages")) self.all_list = QtGui.QTreeWidget(self.tab_all_packages) self.all_list.setGeometry(QtCore.QRect(0, 0, 541, 261)) self.all_list.setObjectName(_fromUtf8("all_list")) self.tab_widget.addTab(self.tab_all_packages, _fromUtf8("")) self.tab_active = QtGui.QWidget() self.tab_active.setObjectName(_fromUtf8("tab_active")) self.active_list = QtGui.QTreeWidget(self.tab_active) self.active_list.setGeometry(QtCore.QRect(0, 0, 541, 261)) self.active_list.setObjectName(_fromUtf8("active_list")) self.tab_widget.addTab(self.tab_active, _fromUtf8("")) self.tab_not_active = QtGui.QWidget() self.tab_not_active.setObjectName(_fromUtf8("tab_not_active")) self.not_active_list = QtGui.QTreeWidget(self.tab_not_active) self.not_active_list.setGeometry(QtCore.QRect(0, 0, 541, 261)) self.not_active_list.setObjectName(_fromUtf8("not_active_list")) self.tab_widget.addTab(self.tab_not_active, _fromUtf8("")) self.tab_update = QtGui.QWidget() self.tab_update.setObjectName(_fromUtf8("tab_update")) self.update_list = QtGui.QTreeWidget(self.tab_update) self.update_list.setGeometry(QtCore.QRect(0, 0, 551, 271)) self.update_list.setObjectName(_fromUtf8("update_list")) self.tab_widget.addTab(self.tab_update, _fromUtf8("")) self.info_label = QtGui.QLabel(self.centralwidget) self.info_label.setGeometry(QtCore.QRect(10, 285, 541, 31)) self.info_label.setObjectName(_fromUtf8("info_label")) QYolk.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(QYolk) self.menubar.setGeometry(QtCore.QRect(0, 0, 565, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) QYolk.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(QYolk) self.statusbar.setObjectName(_fromUtf8("statusbar")) QYolk.setStatusBar(self.statusbar) self.retranslateUi(QYolk) self.tab_widget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(QYolk) def retranslateUi(self, QYolk): QYolk.setWindowTitle(_translate("QYolk", "QYolk III", None)) self.all_list.headerItem().setText(0, _translate("QYolk", "Package Name", None)) self.all_list.headerItem().setText(1, _translate("QYolk", "Version", None)) self.all_list.headerItem().setText(2, _translate("QYolk", "Status", None)) self.tab_widget.setTabText(self.tab_widget.indexOf(self.tab_all_packages), _translate("QYolk", "All Packages", None)) self.active_list.headerItem().setText(0, _translate("QYolk", "Package Name", None)) self.active_list.headerItem().setText(1, _translate("QYolk", "Version", None)) self.active_list.headerItem().setText(2, _translate("QYolk", "Status", None)) self.tab_widget.setTabText(self.tab_widget.indexOf(self.tab_active), _translate("QYolk", "Active", None)) self.not_active_list.headerItem().setText(0, _translate("QYolk", "Package Name", None)) self.not_active_list.headerItem().setText(1, _translate("QYolk", "Version", None)) self.not_active_list.headerItem().setText(2, _translate("QYolk", "Status", None)) self.tab_widget.setTabText(self.tab_widget.indexOf(self.tab_not_active), _translate("QYolk", "Not Active", None)) self.update_list.headerItem().setText(0, _translate("QYolk", "Package Name", None)) self.update_list.headerItem().setText(1, _translate("QYolk", "Installed Version", None)) self.update_list.headerItem().setText(2, _translate("QYolk", "Available Version", None)) self.tab_widget.setTabText(self.tab_widget.indexOf(self.tab_update), _translate("QYolk", "Updates", None)) self.info_label.setText(_translate("QYolk", "TextLabel", None)) | cs |
- Start.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | import sys from Main import Ui_QYolk from PyQt4 import QtCore, QtGui from yolk import yolklib from os.path import expanduser from yolk.cli import get_pkglist from yolk.yolklib import get_highest_version, get_distributions, get_highest_installed from yolk.pypi import CheeseShop import pkg_resources from os.path import isfile from datetime import timedelta from datetime import datetime class StartQT4(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_QYolk() self.ui.setupUi(self) self.ui.info_label.setText("") # set Column Width self.ui.all_list.setColumnWidth(0, 200) self.ui.all_list.setColumnWidth(1, 200) self.ui.active_list.setColumnWidth(0, 200) self.ui.active_list.setColumnWidth(1, 200) self.ui.not_active_list.setColumnWidth(0, 200) self.ui.not_active_list.setColumnWidth(1, 200) self.ui.update_list.setColumnWidth(0, 200) self.ui.update_list.setColumnWidth(1, 200) QtCore.QObject.connect(self.ui.tab_widget, QtCore.SIGNAL("currentChanged(int)"), self.tab_changed) packages = get_distributions('all') for pkg in packages: newItem = QtGui.QTreeWidgetItem(self.ui.all_list) pk = str(pkg[0]).split(' ') if pkg[1]: status = 'Active' else: status = 'Not Active' newItem.setTextColor(0, QtGui.QColor(128, 128, 128)) newItem.setTextColor(1, QtGui.QColor(128, 128, 128)) newItem.setTextColor(2, QtGui.QColor(128, 128, 128)) newItem.setText(0, pk[0]) newItem.setText(1, pk[1]) newItem.setText(2, status) for pkg in get_distributions('active'): newItem = QtGui.QTreeWidgetItem(self.ui.active_list) pk = str(pkg[0]).split(' ') newItem.setText(0, pk[0]) newItem.setText(1, pk[1]) newItem.setText(2, 'Active') for pkg in get_distributions('nonactive'): newItem = QtGui.QTreeWidgetItem(self.ui.not_active_list) pk = str(pkg[0]).split(' ') newItem.setText(0, pk[0]) newItem.setText(1, pk[1]) newItem.setText(2, 'Not Active') def tab_changed(self, column): if column == 0: message = "<b>QYolk</b> : Browsing all installed cheeseshop packages" elif column == 1: message = "<b>QYolk</b> : Browsing active packages" elif column == 2: message = "<b>QYolk</b> : Browsing not active packages (older versions)" elif column == 3: message = "<b>QYolk</b> : Browsing available updates" for pkg in get_fresh_updates(): newItem = QtGui.QTreeWidgetItem(self.ui.update_list) newItem.setText(0, pkg[0]) newItem.setText(1, pkg[1]) newItem.setText(2, pkg[2]) self.ui.info_label.setText(message) def get_fresh_updates(package_name = "", version = ""): ret = [] pypi = CheeseShop() for pkg in get_pkglist(): for (dist, active) in get_distributions("all", pkg, get_highest_installed(pkg)): (project_name, versions) = pypi.query_versions_pypi(dist.project_name) if versions: newest = get_highest_version(versions) if newest != dist.version: if pkg_resources.parse_version(dist.version) < pkg_resources.parse_version(newest): ret.append([project_name, dist.version, newest]) return ret if __name__ == "__main__": app = QtGui.QApplication(sys.argv) myapp = StartQT4() myapp.show() sys.exit(app.exec_()) | cs |
github : https://github.com/skyclad0x7b7/StudyPyQt4/tree/master/0x06.%20QYolk%20III