回答編集履歴

1

追記: ttk.Entry / ttk.Styleを使う場合

2022/03/23 06:39

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -16,3 +16,43 @@
16
16
 
17
17
  ※ ttk.Entry には readonlybackground プロパティは有りません。
18
18
  ttk.* のウィジェットを使う場合は、ttk.Style を使い設定を行うことになります。
19
+
20
+
21
+ ----
22
+ 追記: ttk.Entry を使う場合の、ttk.Style での設定
23
+ ```python
24
+
25
+ import tkinter as tk
26
+ from tkinter import ttk
27
+
28
+ root = tk.Tk()
29
+ style = ttk.Style(root)
30
+
31
+ # ※重要: theme によっては、テーマの背景色が優先される場合がある
32
+ style.theme_use("default")
33
+
34
+ style.configure("My.TEntry",
35
+ foreground="black",
36
+ background="white",
37
+ )
38
+ style.map("My.TEntry",
39
+ foreground=[("readonly", "blue")],
40
+ fieldbackground=[("readonly", "red")],
41
+ )
42
+
43
+ entry = ttk.Entry(root, style="My.TEntry") # "My." の部分は任意の名前に変更可。"TEntry" の部分は ttk.Entry の固有名
44
+ entry.pack()
45
+
46
+ def onClicked(event):
47
+ # NOTE: ウィジェットは複数の状態を同時に持つことができる為、state メソッドで readonly 状態を on/off
48
+ if float(entry.get()) > 0:
49
+ entry.state(["readonly"])
50
+ else:
51
+ entry.state(["!readonly"])
52
+
53
+ button = ttk.Button(root, text="OK")
54
+ button.bind("<1>", onClicked)
55
+ button.pack()
56
+
57
+ root.mainloop()
58
+ ```