2018년 10월 25일 목요일

[PyQt5] QToolButton example

#!/usr/bin/env python# -*- coding:utf-8 -*-import sys

from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidgetAction, QAction, QToolButton

FORM_CLASS, _ = uic.loadUiType('./ui/main.ui')


class MainForm(QMainWindow, FORM_CLASS):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.toolbar = self.addToolBar(u'툴바')

        self._ac1 = QAction(u'액숀1', self)
        self._ac1.triggered.connect(self._action_01)

        self._ac2 = QAction(u'액숀2', self)
        self._ac2.triggered.connect(self._action_02)

        self._tb1 = QToolButton(self)

        self._tb1.addAction(self._ac1)
        self._tb1.addAction(self._ac2)

        self._tb1.setPopupMode(QToolButton.InstantPopup)
        self._tb1.setDefaultAction(self._ac1)

        self.toolbar.addWidget(self._tb1)

    def _action_01(self):
        self._tb1.setDefaultAction(self._ac1)

    def _action_02(self):
        self._tb1.setDefaultAction(self._ac2)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainForm()
    w.show()
    sys.exit(app.exec())

2018년 10월 17일 수요일

[QGIS3] geom to geometry

g = QgsGeometry()
wkb = bytes.fromhex("010100000000000000000045400000000000001440")
g.fromWkb(wkb)
g.get().x()
42.0
g.get().y()
5.0

2018년 10월 16일 화요일

[QGIS3] 모든 레이어 조회

for _temp in QgsProject.instance().layerTreeRoot().children():
    _layer = _temp.layer()

2018년 7월 9일 월요일

[Python] Python 에서 java 호출

pip install JPype1

#!/usr/bin/env python# -*- coding:utf-8 -*-
import jpype

if __name__ == '__main__':
    classpath = './jar/whoareyou.jar'    jpype.startJVM(jpype.getDefaultJVMPath(), '-ea', "-Djava.class.path=%s" % classpath)
    WhoAreYou = jpype.JClass("kr.co.demo.WhoAreYou")

    obj = WhoAreYou()
    ret = obj.whatyourname('hello')
    print ret

    WhoAreYou2 = jpype.JPackage("kr").co.demo.WhoAreYou
    obj2 = WhoAreYou()
    ret = obj.whatyourname('world')
    print ret
    jpype.shutdownJVM()

2018년 6월 21일 목요일

python logging

import logging

logger = logging.getLogger('tornado.general')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter([%(levelname)s | %(asctime)s | %(filename):%(lineno)04s | %(message)s")
fileHandler = logging.handlers.RotatingFileHandler(filename='', maxBytes=1, backupCount=1)
fileHandler.setFormatter(formatter)
fileHandler.set_name('myname')
logger.addHandler(fileHandler)

logger = logging.getLogger('tornado.general')
hs = logger.handlers[:]
for x in hs:
    if x.name == 'myname':
        logger.handlers.remove(x)

2018년 6월 20일 수요일

python decode mime

import email
import base64

def decode_mime(_msg, _result=[]):
    def _decode(msg, result):
        if msg.is_multipart():
            for item in msg.get_payload():
                _decode(item, result)
        else:
            if 'content-type' in msg:
                _content_type = msg['content-type']
                if 'text/html' in _content_type:
                    decoded_text = base64.decodestring(msg.get_payload())
                    result.append(decoded_text)
    _decode(_msg, _result)

decode_mime(email.message_from_string(_message), result=[])

python HTMLParser

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init(self)
        self.result = list()

    def handle_date(self, data):
        if data is not None:
            self.result.append(data)

obj = MyHTMLParser()
obj.feed(html)
print ' '.join(obj.result)

docker redmine 설치

docker-composer.yml version: '3.1' services:      redmine:           image: redmine           restart: always           container_na...