Python総合学習【グリッド操作編】

表の作成
表を作成する処理について解説します。
ソース
#coding: shift_jis
import tkinter as tk
window = tk.Tk()
window.geometry("400x300")
frame = tk.Frame(window, relief=tk.GROOVE)
frame.place(x=10, y=10,width=200,height=200)
frame.grid_propagate(0)
headers = ["社員コード", "社員名"]
for col in range(0, len(headers)):
label_header = tk.Label(frame, width=10)
label_header["relief"] = "ridge"
label_header["text"]=headers[col]
label_header.grid(row=0, column=col)
items = ["社員A","社員B"]
for row in range(0, 2):
for col in range(0, 2):
label_item = tk.Label(frame, width=10)
label_item["background"] = "#ffffff"
label_item["relief"] = "ridge"
label_item.grid(row=row+1, column=col)
if col == 0: label_item["text"] = row + 1
else: label_item["text"] = items[row]
window.mainloop()
Frame(親, キーワード引数)
フレームのインスタンスを生成します。
セル値の取得
セル値を取得する処理について解説します。
ソース
#coding: shift_jis
import tkinter as tk
from tkinter import messagebox
window = tk.Tk()
window.geometry("400x300")
def label_click(event) :
children = frame.winfo_children()
for child in children:
info = child.grid_info()
if info["row"] > 0:
child["background"] = "#ffffff"
event.widget["background"] = "dodgerblue"
global label_active
label_active = event.widget
def button_click() :
messagebox.showinfo("", label_active.cget("text"))
frame = tk.Frame(window, relief=tk.GROOVE)
frame.place(x=10, y=10,width=200,height=200)
frame.grid_propagate(0)
headers = ["社員コード", "社員名"]
for col in range(0, len(headers)):
label_header = tk.Label(frame, width=10)
label_header["relief"] = "ridge"
label_header["text"]=headers[col]
label_header.grid(row=0, column=col)
items = ["社員A","社員B"]
for row in range(0, 2):
for col in range(0, 2):
label_item = tk.Label(frame, width=10)
label_item["background"] = "#ffffff"
label_item["relief"] = "ridge"
label_item.bind("<Button>", label_click)
label_item.grid(row=row+1, column=col)
if col == 0: label_item["text"] = row + 1
else: label_item["text"] = items[row]
button = tk.Button(window, text="値取得")
button["command"] = button_click
button.place(x=10, y=250)
window.mainloop()
winfo_children()
子ウィジェットを取得します。
ウィジェット[“background”]= 色
背景色を設定します。
行の追加
行を追加する処理について解説します。
ソース
#coding: shift_jis
import tkinter as tk
window = tk.Tk()
window.geometry("400x300")
def button_click() :
row_count = frame.grid_size()
for col in range(2):
label_item = tk.Label(frame, width=10)
label_item["background"] = "#ffffff"
label_item["relief"] = "ridge"
label_item.grid(row=row_count[1], column=col)
if col == 0:
label_item["text"] = row_count[1]
else:
label_item["text"] = "社員"+chr(64+row_count[1])
frame = tk.Frame(window, relief=tk.GROOVE)
frame.place(x=10, y=10,width=200,height=200)
frame.grid_propagate(0)
headers = ["社員コード", "社員名"]
for col in range(0, len(headers)):
label_header = tk.Label(frame, width=10)
label_header["relief"] = "ridge"
label_header["text"]=headers[col]
label_header.grid(row=0, column=col)
button = tk.Button(window, text="行追加")
button["command"] = button_click
button.place(x=10, y=250)
window.mainloop()
ウィジェット.grid_size()
行列数を取得します。
テーブルデータの表示
テーブルデータを表示する処理について解説します。
ソース
#coding: shift_jis
import tkinter as tk
import win32com.client
window = tk.Tk()
window.geometry("400x300")
def button_click() :
Cn = win32com.client.Dispatch("ADODB.Connection")
Cn.ConnectionString = "Provider=SQLOLEDB;" \
"Data Source=localhost\\SQLExpress;" \
"Initial Catalog=Database;User ID=sa;Password=sa;"
Cn.Open()
strSQL = "SELECT 社員コード, 社員名 FROM 社員マスタ"
Rs = win32com.client.Dispatch("ADODB.Recordset")
Rs.CursorLocation = 3
Rs.Open(strSQL, Cn)
while not Rs.EOF:
for col in range(2):
label_item = tk.Label(frame, width=10)
label_item["background"] = "#ffffff"
label_item["relief"] = "ridge"
label_item.grid(row= Rs.AbsolutePosition, column=col)
label_item["text"] = Rs.Fields(col).Value
Rs.MoveNext()
frame = tk.Frame(window, relief=tk.GROOVE)
frame.place(x=10, y=10,width=200,height=200)
frame.grid_propagate(0)
headers = ["社員コード", "社員名"]
for col in range(0, len(headers)):
label_header = tk.Label(frame, width=10)
label_header["relief"] = "ridge"
label_header["text"]=headers[col]
label_header.grid(row=0, column=col)
button = tk.Button(window, text="表示")
button["command"] = button_click
button.place(x=10, y=250)
window.mainloop()