質問編集履歴

1

追記

2021/01/26 14:33

投稿

gentakun2
gentakun2

スコア1

test CHANGED
File without changes
test CHANGED
@@ -412,8 +412,406 @@
412
412
 
413
413
 
414
414
 
415
+ ### 追記
416
+
417
+ お答えいただいた方のアドバイスをもとに、新しい関数(引数なしで、本来
418
+
419
+ やりたいことをそこに書いた関数,app,ins,dele)を導入しました。
420
+
421
+
422
+
423
+ おかげ様でappend(追加)ボタンを押した際にはしっかりと表示されるようになりました。
424
+
425
+ しかし、insertとdeleteボタンは前と同様に押しても反応がありません。
426
+
427
+
428
+
429
+ ![イメージ説明](0caf07bd1bb9ef524bfcbeb80dcfb80c.png)
430
+
431
+
432
+
433
+ 思い当たるふしとしましては、二つの共通しているところで、Entry(空白)に打ち込んだものをint型に直すという作業をしています(get_value関数で)。
434
+
435
+
436
+
437
+ そのあとエラーがでないように、insert関数,dele関数のところでそれぞれのindexがNoneであるとき、動作を終了するように(returnを記述)しています。
438
+
439
+
440
+
441
+ もしかしたら空白に打ち込んだindex,index1がどこかしらで共にNoneになってしまってしまい、変化しないのではないかと思っていますが、色々試してもダメでした…
442
+
443
+
444
+
445
+ get_value関数を作るまえに、index = int(txtbox4.get())などとしたのですが、int型に直せないものがあるというように怒られてしまいましたので、この関数を作った次第です。
446
+
447
+
448
+
449
+ 間違えているところを指摘していただけると光栄です。
450
+
451
+
452
+
453
+ 新しい関数を付け加えたコードはこちらです。
454
+
455
+ ```python
456
+
457
+ import tkinter as tk
458
+
459
+
460
+
461
+ global my_list
462
+
463
+
464
+
465
+
466
+
467
+ class MyElement:
468
+
469
+ def __init__(self,val):
470
+
471
+ self.val = val
472
+
473
+ self.prev = None
474
+
475
+ self.next = None
476
+
477
+
478
+
479
+ def to_string(self):
480
+
481
+ str_prev = "None"
482
+
483
+ str_next = "None"
484
+
485
+ if self.prev != None:
486
+
487
+ str_prev = str(self.prev.val)
488
+
489
+ if self.next != None:
490
+
491
+ str_next = str(self.next.val)
492
+
493
+
494
+
495
+ return"(" + str(self.val) + "," + str_prev + ", " + str_next + ")"
496
+
497
+
498
+
499
+ class MyDoublyLinkedList:
500
+
501
+ def __init__(self):
502
+
503
+ self.head = None
504
+
505
+ self.tail = None
506
+
507
+
508
+
509
+
510
+
511
+ def app(self):
512
+
513
+ self.append(MyElement(txtbox1.get()))
514
+
515
+
516
+
517
+ def append(self, element):
518
+
519
+
520
+
521
+
522
+
523
+ if self.head == None:
524
+
525
+ self.head = element
526
+
527
+ self.tail = element
528
+
529
+ else:
530
+
531
+ self.tail.next = element
532
+
533
+ element.prev = self.tail
534
+
535
+ self.tail = element
536
+
537
+
538
+
539
+ self.to_string()
540
+
541
+
542
+
543
+ def get(self, index):
544
+
545
+ ptr = self.head
546
+
547
+ for i in range(0, index):
548
+
549
+ ptr = ptr.next
550
+
551
+
552
+
553
+ return ptr
554
+
555
+
556
+
557
+ def ins(self):
558
+
559
+ self.insert(index,MyElement(txtbox3.get()))
560
+
561
+
562
+
563
+ def insert(self, index, element):
564
+
565
+ if index == None:
566
+
567
+ return
568
+
569
+
570
+
571
+ ptr = self.get(index)
572
+
573
+
574
+
575
+ if ptr == None:
576
+
577
+ self.append(element)
578
+
579
+ else:
580
+
581
+ element.prev = ptr.prev
582
+
583
+ element.next = ptr
584
+
585
+ if ptr.prev == None:
586
+
587
+ self.head = element
588
+
589
+ else:
590
+
591
+ ptr.prev.next = element
592
+
593
+ ptr.prev = element
594
+
595
+
596
+
597
+ self.to_string()
598
+
599
+
600
+
601
+ def dele(self):
602
+
603
+ if index1 == None:
604
+
605
+ return
606
+
607
+
608
+
609
+ y = self.get(index1)
610
+
611
+ my_list.delete(y)
612
+
613
+
614
+
615
+ def delete(self, element):
616
+
617
+ if element.prev == None:
618
+
619
+ self.head = element.next
620
+
621
+ else:
622
+
623
+ element.prev.next = element.next
624
+
625
+ if element.next == None:
626
+
627
+ self.tail = element.prev
628
+
629
+ else:
630
+
631
+ element.next.prev = element.prev
632
+
633
+
634
+
635
+ self.to_string()
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+ def to_string(self):
644
+
645
+ stringfied_data = "["
646
+
647
+ ptr = self.head
648
+
649
+ while ptr != None:
650
+
651
+ stringfied_data += str(ptr.val) + ","
652
+
653
+ ptr = ptr.next
654
+
655
+
656
+
657
+ stringfied_data += "]"
658
+
659
+
660
+
661
+ response_area.configure(text=stringfied_data)
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+ def get_value(entryWidget):
676
+
677
+ value = entryWidget.get()
678
+
679
+ try:
680
+
681
+ return int(value)
682
+
683
+ except ValueError:
684
+
685
+ return None
686
+
687
+
688
+
689
+ if __name__ == "__main__":
690
+
691
+
692
+
693
+ root = tk.Tk()
694
+
695
+ root.geometry("800x400")
696
+
415
- ### 補足情報(FW/ツールのバージョンなど)
697
+ root.title("連結リスト")
698
+
416
-
699
+ label = tk.Label(root,text="連結リストを利用してみましょう",font=("Times New Roman",20))
417
-
418
-
700
+
419
- ここにより詳細な情報を記載してください
701
+ label.place(x=0,y=0)
702
+
703
+
704
+
705
+
706
+
707
+ response_area = tk.Label(root,width = 80,height = 2,bg = 'gray')
708
+
709
+ response_area.place(x=0,y=40)
710
+
711
+
712
+
713
+ my_list = MyDoublyLinkedList()
714
+
715
+
716
+
717
+
718
+
719
+ #追加する機能
720
+
721
+ txtbox1 = tk.Entry()
722
+
723
+ txtbox1.configure(state='normal',width=20)
724
+
725
+ txtbox1.place(x = 0,y = 130)
726
+
727
+
728
+
729
+ label1 = tk.Label(root,text="(追加したい値)",font=("Times New Roman",10))
730
+
731
+ label1.place(x=170,y=130)
732
+
733
+
734
+
735
+ button1 = tk.Button(text = '追加',height = 1,width = 10,command = my_list.app)
736
+
737
+ button1.place(x = 0,y = 90)
738
+
739
+
740
+
741
+ #挿入する機能
742
+
743
+ txtbox2 = tk.Entry()
744
+
745
+ txtbox2.configure(state='normal',width=20)
746
+
747
+ txtbox2.place(x = 0,y = 200)
748
+
749
+
750
+
751
+ label2 = tk.Label(root,text="(挿入したい位置)",font=("Times New Roman",10))
752
+
753
+ label2.place(x=170,y=200)
754
+
755
+
756
+
757
+
758
+
759
+ index = get_value(txtbox2)
760
+
761
+
762
+
763
+ txtbox3 = tk.Entry()
764
+
765
+ txtbox3.configure(state='normal',width=20)
766
+
767
+ txtbox3.place(x = 0,y = 230)
768
+
769
+
770
+
771
+ label3 = tk.Label(root,text="(挿入したい値)",font=("Times New Roman",10))
772
+
773
+ label3.place(x=170,y=230)
774
+
775
+
776
+
777
+
778
+
779
+ button2 = tk.Button(text = '挿入',height = 1,width = 10,command = my_list.ins)
780
+
781
+ button2.place(x = 0,y = 160)
782
+
783
+
784
+
785
+ #削除する機能
786
+
787
+ txtbox4 = tk.Entry()
788
+
789
+ txtbox4.configure(state='normal',width=20)
790
+
791
+ txtbox4.place(x = 0,y = 300)
792
+
793
+
794
+
795
+ index1 = get_value(txtbox4)
796
+
797
+
798
+
799
+ label4 = tk.Label(root,text="(削除したい位置番号)",font=("Times New Roman",10))
800
+
801
+ label4.place(x=170,y=300)
802
+
803
+
804
+
805
+
806
+
807
+ button3 = tk.Button(text = '削除',height = 1,width = 10,command = my_list.dele)
808
+
809
+ button3.place(x = 0,y = 260)
810
+
811
+
812
+
813
+ root.mainloop()
814
+
815
+
816
+
817
+ ```