[PyQt4] 0x06. QYolk III

Programming 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(565345)
        self.centralwidget = QtGui.QWidget(QYolk)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.tab_widget = QtGui.QTabWidget(self.centralwidget)
        self.tab_widget.setGeometry(QtCore.QRect(100551291))
        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(00541261))
        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(00541261))
        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(00541261))
        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(00551271))
        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(1028554131))
        self.info_label.setObjectName(_fromUtf8("info_label"))
        QYolk.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(QYolk)
        self.menubar.setGeometry(QtCore.QRect(0056521))
        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(0200)
        self.ui.all_list.setColumnWidth(1200)
        self.ui.active_list.setColumnWidth(0200)
        self.ui.active_list.setColumnWidth(1200)
        self.ui.not_active_list.setColumnWidth(0200)
        self.ui.not_active_list.setColumnWidth(1200)
        self.ui.update_list.setColumnWidth(0200)
        self.ui.update_list.setColumnWidth(1200)
 
        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(128128128))
                newItem.setTextColor(1, QtGui.QColor(128128128))
                newItem.setTextColor(2, QtGui.QColor(128128128))
                
            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

'Programming' 카테고리의 다른 글

[C++] CreateMutex  (2) 2016.11.22
[PyQt4] 0x07. WebBrowser  (0) 2016.11.21
[PyQt4] 0x05. Final Text Editor  (0) 2016.11.17
[PyQt4] 0x04. QYolk II  (0) 2016.11.16
[PyQt4] 0x03. QYolk I  (6) 2016.11.15
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,