mieki256's diary



2022/03/26() [n年前の日記]

#1 [python] tkinterを勉強中

Python + tkinter について勉強中。

ウィジェットを追加していくための記述が面倒臭くなってきて、配列の中に必要な情報を列挙して、ループで回してウィジェットを生成するように書き換えているところなのだけど。このまま作業を進めていくと、PySimpleGUI に辿り着くなー、と思えてきた。

_PySimpleGUI

配列に必要な情報を列挙すればレイアウトができてしまう PySimpleGUI の発想は正しい気がする。自分も結局そういう記述の仕方になりつつある…。そして、日本国内で「ネ申Excel」が誕生する理由もなんだか分かったような気分になってきた。マス目を使ってレイアウトしていくのは、やっぱり分かりやすい…。

OptionMenuについて。 :

複数の選択肢の中から一つだけ選べる OptionMenu の使い方がよく分からなかったので手元で動作確認。

_02_optionmenu.py
u"""
OptionMenu test.

* Windows10 x64 21H2 + Python 2.7.18 32bit + tkinter
* Windows10 x64 21H2 + Python 3.9.11 64bit + tkinter
"""

try:
    # Python 2.7
    import Tkinter as tk
except:
    # Python 3.x
    import tkinter as tk

OPT_KIND = [
    "Lines",
    "Boxs",
    "Rect only"
    ]

root = tk.Tk()
root.geometry("320x240")

# reserve variable
opt = tk.StringVar(root)
opt.set(OPT_KIND[0])

lbl = tk.StringVar(root)
lbl.set("Please select")

# create widget and layout
optmenu = tk.OptionMenu(root, opt, *OPT_KIND).pack(side = tk.TOP)
label = tk.Label(root, textvariable=lbl).pack(side = tk.BOTTOM)

def callback(*args):
    """set lbl value from opt."""
    v = opt.get()
    if v in OPT_KIND:
        idx = OPT_KIND.index(v)
    else:
        idx = -1
    lbl.set("Select [%s], index = %d" % (v, idx))

# Call callback when variable opt is updated
opt.trace("w", callback)

root.mainloop()

ss_02_optionmenu.png

  • OptionMenu に指定した変数内には、配列のインデックス値ではなくて文字列が入る。
  • OptionMenu に配列を指定する際は、「*lst」といった感じで、「*」を先頭につける。
  • 指定した変数が更新、もしくは選択された際に特定の関数を呼びたかったら、.trace("w", hoge) を使う。
  • 文字列で、配列の中身を検索して、インデックス値に変換するには、.index() を使う。

以上です。

過去ログ表示

Prev - 2022/03 - Next
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

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project