teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

コンボボックスの内容変更

2021/11/26 10:52

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -182,7 +182,7 @@
182
182
  frmConvMenu.grid(row=0, column=0, sticky=tk.E + tk.W + tk.N + tk.S)
183
183
 
184
184
  # 1 Key選択コンボボックス
185
- tmp_list = [1, 2, 3, 4, 5]
185
+ tmp_list = [12345, 22345, 32345, 42345, 52345]
186
186
  cmbox_Key = ttk.Combobox(frmConvMenu, width=3, height=3, font=("Arial", 16), values=tmp_list)
187
187
  cmbox_Key.grid(row=1, column=6, sticky=tk.E + tk.W + tk.S)
188
188
  cmbox_Key.bind("<<ComboboxSelected>>", cmbox_KeyChange)

4

漏れを追記

2021/11/26 10:51

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -122,7 +122,9 @@
122
122
  #############################################################################
123
123
  # 初期化処理
124
124
  def initial_frmConvMenu():
125
-
125
+ # 漏れ
126
+ cmbox_Key.delete(0, tk.END)
127
+
126
128
  global cmbox_Key_ttp
127
129
  #if cmbox_key_ttp.winfo_exist():
128
130
  # cmbox_key_ttp.hidetip()
@@ -244,4 +246,9 @@
244
246
  generate_frame(root)
245
247
 
246
248
  root.mainloop()
249
+ ```
250
+
251
+ ```python
252
+ # 漏れ
253
+ cmbox_Key.delete(0, tk.END)
247
254
  ```

3

お試しソース追加

2021/11/25 12:01

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,31 @@
1
1
  [こちらの記事](https://stackoverflow.com/questions/3221956/how-do-i-display-tooltips-in-tkinter)で紹介されたようにフレーム上のWIDGETへ ツールチップを登場させることに成功しました。
2
2
 
3
+ ### 質問
4
+ 画面遷移時、フレーム上のWIDGETを初期表示段階に元に戻すことを行っています。
5
+ (同じフレームを再度rootに呼び出すと 前回当該フレームに表れていたWIDGETが 前回のまま表示されるので)
6
+
7
+ 動的にヒントテキストを生成できたのは 良かったのですが、生成したヒントテキストの削除方法が分からず
8
+ 同じフレームを 呼出すと 前回登場させたヒントテキストが 残ってしまう問題が生じています。
9
+
10
+ ご紹介のクラスは ラベルのWIDGETを流用した作りなのでしょうが、どういった名前で作られているのか・どうすれば削除できるのかが分かりません。( pack_forget() の利用と推察するも)
11
+
12
+ 当該フレームに 自分が定義したラベルもあるので 無条件にラベルを消すこともできません。
13
+ JQueryみたいに インデックス指定で要素を消すみないなことができますでしょうか?
14
+
15
+ 削除方法 お分かりの方おられましたら ご教示をよろしくお願い致します。
16
+
17
+ ### 1501 画像追加
18
+ ![イメージ説明](e9e88824677cf471bdc47bcb2f042474.png)
19
+
3
- 以下のクラをまるっと貼り付け
20
+ ### 1730 お試しソー追加
4
- ```Python
21
+ ```python
22
+ # tkinterのインポート
23
+ import tkinter as tk
24
+ import tkinter.ttk as ttk
25
+ import math
26
+ import os
27
+ import datetime
28
+
5
29
  class CreateToolTip(object):
6
30
  """
7
31
  create a tooltip for a given widget
@@ -54,26 +78,170 @@
54
78
  self.tw= None
55
79
  if tw:
56
80
  tw.destroy()
57
- ```
58
- コンボボックスからアイテムが選択された、と検知する関数の中で 以下を記述しただけのことです。
59
- ```python
60
- cmbox_Key_ttp = CreateToolTip(cmbox_Key, cmbox_Key.get()) # ツールチップで全容を表示
61
- ```
62
81
 
63
82
 
83
+ #################################################################################
84
+ # 画面生成 #
85
+ #################################################################################
86
+ def resource_path(relative_path):
64
- ### 質問
87
+ try:
88
+ # PyInstaller creates a temp folder and stores path in _MEIPASS
89
+ base_path = sys._MEIPASS
90
+ except Exception:
65
- 画面遷移時、フレーム上のWIDGETを初期表示段階に元に戻すことを行っています。
91
+ base_path = os.path.abspath(".")
66
- (同じフレームを再度rootに呼び出すと 前回当該フレームに表れていたWIDGETが 前回のまま表示されるので)
67
92
 
68
- 動的にヒントテキストを生成できたのは 良かったのですが、生成したヒントテキストの削除方法が分からず
69
- 同じフレームを 呼出すと 前回登場させたヒントテキストが 残ってしまう問題が生じています。
93
+ return os.path.join(base_path, relative_path)
70
94
 
95
+ def adjust_windowsize(root):
96
+ ww = root.winfo_screenwidth()
71
- ご紹介のクラスは ラベルのWIDGETを流用した作りなのでしょうが、どういった名前で作られているのか・どうすれば削除できるのかが分かりません。( pack_forget() の利用と推察するも)
97
+ wh = root.winfo_screenheight()
72
98
 
73
- 当該フレームに 自分が定義したラベルもあるので 無条件にラベルを消すこともできません。
74
- JQueryみたいに インデックス指定で要素を消すみないなことができますでしょうか?
99
+ lw = math.ceil(ww * 0.3208)
100
+ lh = math.ceil(wh * 0.477)
75
101
 
76
- 削除方法 お分かりの方おられましたら ご教示をよろしくお願い致します。
102
+ root.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)))
77
103
 
104
+ #################################################################################
105
+ # フレーム生成 #
106
+ #################################################################################
107
+ def generate_frame(root):
78
- ### 1501 像追加
108
+ # フレーム切替え=面遷移
109
+ def change_frame(frame):
110
+ if frame.winfo_name() == "frmIOMenu":
111
+ btn_AssignInputFile.focus_set()
112
+ initial_frmIOMenu()
113
+ elif frame.winfo_name() == "frmConvMenu":
114
+ btn_ReturnMenu.focus_set()
115
+ initial_frmConvMenu()
116
+ else:
117
+ btn_RunMenu.focus_set()
118
+
119
+ frame.tkraise()
120
+ #############################################################################
121
+ # 画面制御関数 変換定義 #
122
+ #############################################################################
123
+ # 初期化処理
124
+ def initial_frmConvMenu():
125
+
126
+ global cmbox_Key_ttp
127
+ #if cmbox_key_ttp.winfo_exist():
128
+ # cmbox_key_ttp.hidetip()
129
+ cmbox_Key_ttp.text = ""
130
+
131
+ # コンボボックス選択
132
+ def cmbox_KeyChange(event=None):
133
+
134
+ cmbox_Key_ttp.text = event.widget.get()
135
+
136
+
137
+ #############################################################################
138
+ # STYLE #
139
+ #############################################################################
140
+ style = ttk.Style()
79
- ![イメージ説明](e9e88824677cf471bdc47bcb2f042474.png)
141
+ style.theme_use('winnative')
142
+ style.configure("TCombobox", arrowsize=0)
143
+ style.configure("TButton", font=("Arial", 16))
144
+ style.configure("TFrame", background="#FFFFCC")
145
+ style.configure("TRadiobutton", background="#FFFFCC")
146
+ style.configure("TLabel", font=("Arial", 16), anchor='', background="#FFFFCC")
147
+ style.configure("TLabelframe", background="#FFFFCC", relief="sunken")
148
+ style.configure("TLabelframe.Label", foreground="red", font=("Arial", 16), background="#FFFFCC")
149
+ style.configure("LTREE.Treeview", background="black", foreground="white", fieldbackground="black", font=("Arial", 16), rowheight=25,)
150
+ style.configure("UTREE.Treeview", background="white", foreground="black", fieldbackground="white", font=("Arial", 16), rowheight=25,)
151
+
152
+ style.configure("Treeview.Heading", background="green", foreground="white", font=("Arial", 16), rowheight=25,)
153
+
154
+ #############################################################################
155
+ # メインメニュー用フレーム設置 #
156
+ #############################################################################
157
+ frmMain = ttk.Frame(root, name="frmMain")
158
+ frmMain.grid(row=0, column=0, sticky=tk.E + tk.W + tk.N + tk.S)
159
+
160
+ # メインメニューにボタン配置
161
+ btn_SettingMenu = ttk.Button(frmMain, text = "入出力定義")
162
+ btn_SettingMenu.pack(fill = tk.BOTH, expand=True)
163
+
164
+ btn_SettingMenu = ttk.Button(frmMain, text = "変換定義", command=lambda: change_frame(frmConvMenu))
165
+ btn_SettingMenu.pack(fill = tk.BOTH, expand=True)
166
+ btn_SettingMenu.bind('<Return>', lambda a: change_frame(frmConvMenu))
167
+
168
+ btn_RunMenu = ttk.Button(frmMain, text = "実行メニュー")
169
+ btn_RunMenu.pack(fill = tk.BOTH, expand=True)
170
+ btn_RunMenu.focus_set()
171
+
172
+ btn_Close = ttk.Button(frmMain, text = "終了", command=root.destroy)
173
+ btn_Close.pack(fill = tk.BOTH, expand=True)
174
+ #############################################################################
175
+ # 変換対応表メニュー用フレーム設置 #
176
+ #############################################################################
177
+ frmConvMenu = ttk.Frame(root, name="frmConvMenu")
178
+ frmConvMenu.grid_rowconfigure([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], weight=1)
179
+ frmConvMenu.grid_columnconfigure([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], weight=1, minsize=40)
180
+ frmConvMenu.grid(row=0, column=0, sticky=tk.E + tk.W + tk.N + tk.S)
181
+
182
+ # 1 Key選択コンボボックス
183
+ tmp_list = [1, 2, 3, 4, 5]
184
+ cmbox_Key = ttk.Combobox(frmConvMenu, width=3, height=3, font=("Arial", 16), values=tmp_list)
185
+ cmbox_Key.grid(row=1, column=6, sticky=tk.E + tk.W + tk.S)
186
+ cmbox_Key.bind("<<ComboboxSelected>>", cmbox_KeyChange)
187
+
188
+ global cmbox_Key_ttp
189
+ cmbox_Key_ttp = CreateToolTip(cmbox_Key, cmbox_Key.get())
190
+
191
+ # 11 メニューへボタン
192
+ btn_ReturnMenu = ttk.Button(frmConvMenu, text = "閉じる", command=lambda: change_frame(frmMain))
193
+ btn_ReturnMenu.grid(row=11, column=8, sticky=tk.E + tk.W, padx=(0,10))
194
+
195
+
196
+ # 起動時メインのフレームを前面に
197
+ frmMain.tkraise()
198
+
199
+ ##########################################################################################################
200
+ # TkInter GUIアプリケーション起動 #
201
+ ##########################################################################################################
202
+ if __name__ == "__main__":
203
+ # ウインドウの作成
204
+ root = tk.Tk()
205
+
206
+ #フォームサイズを実行端末から導き、ド真中に配置表示
207
+ adjust_windowsize(root)
208
+
209
+ #タイトルを指定
210
+ root.title("TkInterの勉強")
211
+
212
+ #フレーム切替え達成の上で とても重要、ルートのグリッド定義
213
+ root.grid_columnconfigure(0, weight=1)
214
+ root.grid_columnconfigure(1, weight=1)
215
+ root.grid_columnconfigure(2, weight=1)
216
+ root.grid_columnconfigure(3, weight=1)
217
+ root.grid_columnconfigure(4, weight=1)
218
+ root.grid_columnconfigure(5, weight=1)
219
+ root.grid_columnconfigure(6, weight=1)
220
+ root.grid_columnconfigure(7, weight=1)
221
+ root.grid_columnconfigure(8, weight=1)
222
+ root.grid_columnconfigure(9, weight=1)
223
+
224
+ root.grid_rowconfigure(0, weight=1)
225
+ root.grid_rowconfigure(1, weight=1)
226
+ root.grid_rowconfigure(2, weight=1)
227
+ root.grid_rowconfigure(3, weight=1)
228
+ root.grid_rowconfigure(4, weight=1)
229
+ root.grid_rowconfigure(5, weight=1)
230
+ root.grid_rowconfigure(6, weight=1)
231
+ root.grid_rowconfigure(7, weight=1)
232
+ root.grid_rowconfigure(8, weight=1)
233
+ root.grid_rowconfigure(9, weight=1)
234
+ root.grid_rowconfigure(10, weight=1)
235
+ root.grid_rowconfigure(11, weight=1)
236
+
237
+ #フォームの最大化、×ボタン操作を無効化
238
+ root.resizable(0,0)
239
+ root.protocol('WM_DELETE_WINDOW', (lambda: 'pass')())
240
+
241
+ # カーソル変更
242
+ root["cursor"] = "hand2"
243
+
244
+ generate_frame(root)
245
+
246
+ root.mainloop()
247
+ ```

2

画像追加

2021/11/25 08:26

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -73,4 +73,7 @@
73
73
  当該フレームに 自分が定義したラベルもあるので 無条件にラベルを消すこともできません。
74
74
  JQueryみたいに インデックス指定で要素を消すみないなことができますでしょうか?
75
75
 
76
- 削除方法 お分かりの方おられましたら ご教示をよろしくお願い致します。
76
+ 削除方法 お分かりの方おられましたら ご教示をよろしくお願い致します。
77
+
78
+ ### 1501 画像追加
79
+ ![イメージ説明](e9e88824677cf471bdc47bcb2f042474.png)

1

誤記

2021/11/25 06:01

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -64,13 +64,13 @@
64
64
  ### 質問
65
65
  画面遷移時、フレーム上のWIDGETを初期表示段階に元に戻すことを行っています。
66
66
  (同じフレームを再度rootに呼び出すと 前回当該フレームに表れていたWIDGETが 前回のまま表示されるので)
67
- 先に伝えたようにm、動的にヒントテキストを生成したのは 良かったのですが、生成したヒントテキストの削除方法が分からず
68
- 同じフレームを 呼び出すと 前回登場のヒントテキストが 残ってしまっています。
69
67
 
70
- ラベルのWIDGET流用し作りなのでしょうが、どういっ名前で 作られているか・どうすれば削除できるのかが分かりません。
68
+ 動的にヒントテキスト生成できたのは 良かったのが、生成しヒントテキストの削除方法が分からず
71
- ( pack_forget() の利用推察るも)
69
+ 同じフレームを 呼出す 前回登場させたヒントテキストが 残ってしまう問題が生じていま
72
70
 
71
+ ご紹介のクラスは ラベルのWIDGETを流用した作りなのでしょうが、どういった名前で作られているのか・どうすれば削除できるのかが分かりません。( pack_forget() の利用と推察するも)
72
+
73
73
  当該フレームに 自分が定義したラベルもあるので 無条件にラベルを消すこともできません。
74
- JQueryみたいに インデックス指定で せたりできますでしょうか?
74
+ JQueryみたいに インデックス指定で要素をすみないなことができますでしょうか?
75
75
 
76
76
  削除方法 お分かりの方おられましたら ご教示をよろしくお願い致します。