3+

python で csv を読む

標準関数で読むとき

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

import csv
import sys

def main():

    fields = ["No","time","clock","imem_addr","asm","dmem_addr","data"]
    data = csv.DictReader(open(sys.argv[1],"r"),skipinitialspace=True,
                          fieldnames=fields)

    for row in data:
        for key in fields:
            print key,":",row[key]

if __name__ == "__main__":
    main()

pandas で読むとき

先頭の無効データを読み飛ばすときは、skiprows を使う

import pandas as pd

def main():

    pdd = pd.read_csv(sys.argv[1],names=fields,skiprows=5)
    print pdd

QPainter and QScrollArea plactice

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

import sys

from PyQt4 import QtCore,QtGui

class paintArea(QtGui.QWidget):

    def __init__(self):
        super(paintArea, self).__init__()

        self.setMinimumWidth(500)
        self.setMinimumHeight(500)

        self.offscreen = QtGui.QPixmap(1000,1000)

        painter = QtGui.QPainter()
        painter.begin(self.offscreen)
        painter.setPen(QtCore.Qt.yellow)
        for i in range(10):
            painter.drawLine(10,i*10,100,i*10)
        painter.end()

    def paintEvent(self,e):
        painter = QtGui.QPainter()
        painter.begin(self)
        painter.drawPixmap(0,0,self.offscreen)
        painter.end()

class scrollArea(QtGui.QWidget):
    def __init__(self):
        super(scrollArea, self).__init__()

        self.scrollArea = QtGui.QScrollArea(self)

        self.scrollArea.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOn )
        self.scrollArea.setWidgetResizable(False)

        self.paintArea = paintArea()
        self.scrollArea.setWidget(self.paintArea)

        self.layout = QtGui.QVBoxLayout(self)
        self.layout.addWidget(self.scrollArea)

def main():

    app = QtGui.QApplication(sys.argv)
    ex = scrollArea()
    ex.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

f:id:zey:20140919200115p:plain

QTreeWidget example

ツリー構造のリストを、割りと簡単に作るサンプル。
タプルのリストからツリーアイテムを作る。

タプル(k,v,n)の構造は、

  • k:ノードの名前
  • v:ノードの値
  • n:子ノード(のリスト)

以下ソース。

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

import sys, os, pprint, time
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def hoge(item,column):
    print item.data(column,Qt.UserRole).toString()

def make_tree(lst):

    items = []
    while len(lst):
        (k,v,n) = lst.pop(0)
        item = QTreeWidgetItem(QStringList(QString(str(k))))
        item.setData(0,Qt.UserRole,v)
        items.append(item)
        if n is not None:
            items[-1].addChildren( make_tree(n) )

    return items

def main():

    app = QApplication(sys.argv)
    app.setStyle( "Plastique" )

    lst = [("0",0,None),
           ("1",1,
            [
                ("1-0",10,None),
                ("1-1",11,None),
                ("1-2",12,
                 [
                        ("1-2-0",120,None),
                        ("1-2-1",121,None)
                        ]
                 ),
                ("1-3",13,None)
                ]
            ),
           ["2",2,None]]
    

    treeWidget = QTreeWidget()
    treeWidget.addTopLevelItems(make_tree(lst))
    treeWidget.itemClicked.connect(hoge)
    treeWidget.header().hide()
    treeWidget.show()

    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

f:id:zey:20140912222221p:plain

QTreeViewWidget example

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

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

def main():
    app = QApplication(sys.argv)
    treeWidget = QTreeWidget()
    treeWidget.setColumnCount(1)
    items = []
    child = []
    for i in range(5):
        items.append(QTreeWidgetItem(QStringList(["hoge"+str(i),"moge"+str(i+1)])))

    for i in range(10):
        child.append(QTreeWidgetItem(QStringList(QString("child: %1").arg(i))))

    items[0].addChildren(child)

    treeWidget.setHeaderLabels(["name","info"])
    treeWidget.insertTopLevelItems(0,items)
    treeWidget.itemClicked.connect(item_change)
    treeWidget.show()

    sys.exit(app.exec_())

def item_change(item,column):
    print item
    print column

if __name__ == "__main__":
    main()

Gtk (perl) のメモ

■ Gtk2::Window->new('type')

'type' は以下2つ

  • 'toplevel' / 'GTK_WINDOW_TOPLEVEL'
  • 'popup' / 'GTK_WINDOW_POPUP'

'type' を指定しない場合のデフォルト値は 'toplevel'
以下のコードは同じ。

my $window = Gtk2::Window->new;
my $window = Gtk2::Window->new ('toplevel');
my $window = Gtk2::Window->new ('GTK_WINDOW_TOPLEVEL');

■ Gtk2::Window クラスのプロパティ

'window-position' を設定できる。
設定の仕方は以下。

$window->set_position ($position)
$position(Gtk2::WindowPosition)
;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)