wafuの技術

技術習得の努力メモです。

RubyとPythonのtkでListview


RubyPythonのtkでリストビューを作ってみました。

RubyPythonも本当によく似ています。

 

Rubyの例

# coding: utf-8
require 'tk'

$tree = Tk::Tile::Treeview.new()

#列インデックスの作成
$tree['columns'] = ['1','2','3']

#各列の設定
$tree.column_configure("1", :width => 100)
$tree.column_configure('2', :width => 100, :anchor => 'center')
$tree.column_configure('3', :width => 100, :anchor => 'center')

# 各列のヘッダー設定(インデックス,テキスト)
$tree.heading_configure("1", :text => '日付')
$tree.heading_configure('2', :text => '内訳')
$tree.heading_configure('3', :text => '金額')

# レコードの作成
# 1番目の引数-配置場所(ツリー形式にしない表設定ではブランクとする)
# 2番目の引数-end:表の配置順序を最下部に配置
#             (行インデックス番号を指定することもできる)
# 3番目の引数-values:レコードの値をタプルで指定する
$tree.insert('', 'end', :values => ["2017/5/1","食費",3500])
$tree.insert('', 'end', :values => ["2017/5/10","光熱費",7800])
$tree.insert('', 'end', :values => ["2017/5/10","住宅費",64000])

#表スタイルの設定
$tree["show"] = "headings"        #表示をlistviewにする

#画面表示

$tree.pack()

Tk.mainloop

 

Rubyの例(選択行の検出)

# coding: utf-8
require 'tk'

#呼び出し関数    選択した行を表示
def select_record()
    # 選択行の判別
    record_id = $tree.focus_item()
    # 選択行のレコードを取得
    record_values = $tree.itemcget(record_id, 'values')

    puts(record_values[0])   #選択した行を表示

end

 

$tree = Tk::Tile::Treeview.new()

#選択行を検出
$tree.bind("<TreeviewSelect>",proc{select_record})

#列インデックスの作成
$tree['columns'] = ['1','2','3']


#各列の設定
$tree.column_configure("1", :width => 100)
$tree.column_configure('2', :width => 100, :anchor => 'center')
$tree.column_configure('3', :width => 100, :anchor => 'center')

# 各列のヘッダー設定(インデックス,テキスト)
$tree.heading_configure("1", :text => '日付')
$tree.heading_configure('2', :text => '内訳')
$tree.heading_configure('3', :text => '金額')

# レコードの作成
# 1番目の引数-配置場所(ツリー形式にしない表設定ではブランクとする)
# 2番目の引数-end:表の配置順序を最下部に配置
#             (行インデックス番号を指定することもできる)
# 3番目の引数-values:レコードの値をタプルで指定する
$tree.insert('', 'end', :values => ["2017/5/1","食費",3500])
$tree.insert('', 'end', :values => ["2017/5/10","光熱費",7800])
$tree.insert('', 'end', :values => ["2017/5/10","住宅費",64000])

#表スタイルの設定
$tree["show"] = "headings"        #表示をlistviewにする

$tree.pack()

Tk.mainloop

 

Pythonの例

import tkinter as tk
from tkinter import ttk

def select_record(event):
    # 選択行の判別
    record_id = tree.focus()
    # 選択行のレコードを取得
    record_values = tree.item(record_id, 'values')
    print(record_values[1])
    tree.delete(record_id)
# 列の識別名を指定
column = ('ID', 'Name', 'Score')
# メインウィンドウの生成
root = tk.Tk()
root.title('List')
root.geometry('400x300')
# Treeviewの生成
tree = ttk.Treeview(root, columns=column)
tree.bind("<<TreeviewSelect>>", select_record)
# 列の設定
tree.column('#0',width=0, stretch='no')
tree.column('ID', anchor='center', width=80)
tree.column('Name',anchor='w', width=100)
tree.column('Score', anchor='center', width=80)
# 列の見出し設定
tree.heading('#0',text='')
tree.heading('ID', text='ID',anchor='center')
tree.heading('Name', text='Name', anchor='w')
tree.heading('Score',text='Score', anchor='center')
# レコードの追加
tree.insert(parent='', index='end', iid=0 ,values=(1, 'RUBY',80))
tree.insert(parent='', index='end', iid=1 ,values=(2,'PYTHON', 90))
tree.insert(parent='', index='end', iid=2, values=(3,'C++', 45))
tree.insert(parent='', index='end', iid=3, values=(4,'C#', 60))
tree.insert(parent='', index='end', iid=4, values=(5,'Java', 99))
# ウィジェットの配置
tree.pack(pady=10)

root.mainloop()