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

質問編集履歴

1

追記

2021/01/26 14:33

投稿

gentakun2
gentakun2

スコア1

title CHANGED
File without changes
body CHANGED
@@ -205,6 +205,205 @@
205
205
  ![GUIの現状況](62ef12c2dffed5818c4a5aec6a77b264.png)
206
206
 
207
207
 
208
+ ### 追記
208
- ### 補足情報(FW/ツールのバージョンど)
209
+ お答えいただいた方アドイスをもとに、新しい関数(引数しで、本来
210
+ やりたいことをそこに書いた関数,app,ins,dele)を導入しました。
209
211
 
212
+ おかげ様でappend(追加)ボタンを押した際にはしっかりと表示されるようになりました。
213
+ しかし、insertとdeleteボタンは前と同様に押しても反応がありません。
214
+
215
+ ![イメージ説明](0caf07bd1bb9ef524bfcbeb80dcfb80c.png)
216
+
217
+ 思い当たるふしとしましては、二つの共通しているところで、Entry(空白)に打ち込んだものをint型に直すという作業をしています(get_value関数で)。
218
+
219
+ そのあとエラーがでないように、insert関数,dele関数のところでそれぞれのindexがNoneであるとき、動作を終了するように(returnを記述)しています。
220
+
221
+ もしかしたら空白に打ち込んだindex,index1がどこかしらで共にNoneになってしまってしまい、変化しないのではないかと思っていますが、色々試してもダメでした…
222
+
223
+ get_value関数を作るまえに、index = int(txtbox4.get())などとしたのですが、int型に直せないものがあるというように怒られてしまいましたので、この関数を作った次第です。
224
+
210
- こにより詳細な情報記載してくださ
225
+ 間違えていると指摘していただけると光栄です。
226
+
227
+ 新しい関数を付け加えたコードはこちらです。
228
+ ```python
229
+ import tkinter as tk
230
+
231
+ global my_list
232
+
233
+
234
+ class MyElement:
235
+ def __init__(self,val):
236
+ self.val = val
237
+ self.prev = None
238
+ self.next = None
239
+
240
+ def to_string(self):
241
+ str_prev = "None"
242
+ str_next = "None"
243
+ if self.prev != None:
244
+ str_prev = str(self.prev.val)
245
+ if self.next != None:
246
+ str_next = str(self.next.val)
247
+
248
+ return"(" + str(self.val) + "," + str_prev + ", " + str_next + ")"
249
+
250
+ class MyDoublyLinkedList:
251
+ def __init__(self):
252
+ self.head = None
253
+ self.tail = None
254
+
255
+
256
+ def app(self):
257
+ self.append(MyElement(txtbox1.get()))
258
+
259
+ def append(self, element):
260
+
261
+
262
+ if self.head == None:
263
+ self.head = element
264
+ self.tail = element
265
+ else:
266
+ self.tail.next = element
267
+ element.prev = self.tail
268
+ self.tail = element
269
+
270
+ self.to_string()
271
+
272
+ def get(self, index):
273
+ ptr = self.head
274
+ for i in range(0, index):
275
+ ptr = ptr.next
276
+
277
+ return ptr
278
+
279
+ def ins(self):
280
+ self.insert(index,MyElement(txtbox3.get()))
281
+
282
+ def insert(self, index, element):
283
+ if index == None:
284
+ return
285
+
286
+ ptr = self.get(index)
287
+
288
+ if ptr == None:
289
+ self.append(element)
290
+ else:
291
+ element.prev = ptr.prev
292
+ element.next = ptr
293
+ if ptr.prev == None:
294
+ self.head = element
295
+ else:
296
+ ptr.prev.next = element
297
+ ptr.prev = element
298
+
299
+ self.to_string()
300
+
301
+ def dele(self):
302
+ if index1 == None:
303
+ return
304
+
305
+ y = self.get(index1)
306
+ my_list.delete(y)
307
+
308
+ def delete(self, element):
309
+ if element.prev == None:
310
+ self.head = element.next
311
+ else:
312
+ element.prev.next = element.next
313
+ if element.next == None:
314
+ self.tail = element.prev
315
+ else:
316
+ element.next.prev = element.prev
317
+
318
+ self.to_string()
319
+
320
+
321
+
322
+ def to_string(self):
323
+ stringfied_data = "["
324
+ ptr = self.head
325
+ while ptr != None:
326
+ stringfied_data += str(ptr.val) + ","
327
+ ptr = ptr.next
328
+
329
+ stringfied_data += "]"
330
+
331
+ response_area.configure(text=stringfied_data)
332
+
333
+
334
+
335
+
336
+
337
+
338
+ def get_value(entryWidget):
339
+ value = entryWidget.get()
340
+ try:
341
+ return int(value)
342
+ except ValueError:
343
+ return None
344
+
345
+ if __name__ == "__main__":
346
+
347
+ root = tk.Tk()
348
+ root.geometry("800x400")
349
+ root.title("連結リスト")
350
+ label = tk.Label(root,text="連結リストを利用してみましょう",font=("Times New Roman",20))
351
+ label.place(x=0,y=0)
352
+
353
+
354
+ response_area = tk.Label(root,width = 80,height = 2,bg = 'gray')
355
+ response_area.place(x=0,y=40)
356
+
357
+ my_list = MyDoublyLinkedList()
358
+
359
+
360
+ #追加する機能
361
+ txtbox1 = tk.Entry()
362
+ txtbox1.configure(state='normal',width=20)
363
+ txtbox1.place(x = 0,y = 130)
364
+
365
+ label1 = tk.Label(root,text="(追加したい値)",font=("Times New Roman",10))
366
+ label1.place(x=170,y=130)
367
+
368
+ button1 = tk.Button(text = '追加',height = 1,width = 10,command = my_list.app)
369
+ button1.place(x = 0,y = 90)
370
+
371
+ #挿入する機能
372
+ txtbox2 = tk.Entry()
373
+ txtbox2.configure(state='normal',width=20)
374
+ txtbox2.place(x = 0,y = 200)
375
+
376
+ label2 = tk.Label(root,text="(挿入したい位置)",font=("Times New Roman",10))
377
+ label2.place(x=170,y=200)
378
+
379
+
380
+ index = get_value(txtbox2)
381
+
382
+ txtbox3 = tk.Entry()
383
+ txtbox3.configure(state='normal',width=20)
384
+ txtbox3.place(x = 0,y = 230)
385
+
386
+ label3 = tk.Label(root,text="(挿入したい値)",font=("Times New Roman",10))
387
+ label3.place(x=170,y=230)
388
+
389
+
390
+ button2 = tk.Button(text = '挿入',height = 1,width = 10,command = my_list.ins)
391
+ button2.place(x = 0,y = 160)
392
+
393
+ #削除する機能
394
+ txtbox4 = tk.Entry()
395
+ txtbox4.configure(state='normal',width=20)
396
+ txtbox4.place(x = 0,y = 300)
397
+
398
+ index1 = get_value(txtbox4)
399
+
400
+ label4 = tk.Label(root,text="(削除したい位置番号)",font=("Times New Roman",10))
401
+ label4.place(x=170,y=300)
402
+
403
+
404
+ button3 = tk.Button(text = '削除',height = 1,width = 10,command = my_list.dele)
405
+ button3.place(x = 0,y = 260)
406
+
407
+ root.mainloop()
408
+
409
+ ```