前提
tkinterでUIの練習をしている初心者です。
書籍のデータを入力する簡単なUI画面を作ろうとしている途中、tk.TEXTのみ
配置が上手くいかず試行錯誤中です。
実現したいこと
画面
発生している問題・エラーメッセージ
left_frameでフレーム内を7等分しているのと同じ比率で、right_frameも7等分し、1:6でnote_labelとnote_area(テキストフィールド)を設置したいのですが、
うまく分割されず、テキストフィールドが7つ分を占有して、note_labelが上部に追い出されてしまいます。
該当のソースコード
Python
1 import tkinter as tk 2 from tkinter import ttk 3 4 window = tk.Tk() 5 window.geometry('400x400') 6 window.title('data window') 7 8 #上下フレーム 9 up_frame = tk.Frame(window, width=400, height=350) 10 under_frame = tk.Frame(window, width=400, height=50) 11 12 #上フレームを左右フレームに分ける 13 left_frame = tk.Frame(up_frame, width=200, height=300) 14 right_frame = tk.Frame(up_frame, width=200, height=300) 15 16 up_frame.grid_propagate(False) 17 under_frame.grid_propagate(False) 18 left_frame.grid_propagate(False) 19 right_frame.grid_propagate(False) 20 21 #up_frameのconfigure 22 up_frame.columnconfigure(0,weight=1) 23 up_frame.columnconfigure(1,weight=1) 24 25 #left_frameのconfigure 26 left_frame.columnconfigure(0,weight=1) 27 left_frame.columnconfigure(1,weight=1) 28 left_frame.rowconfigure(0,weight=1) 29 left_frame.rowconfigure(1,weight=1) 30 left_frame.rowconfigure(2,weight=1) 31 left_frame.rowconfigure(3,weight=1) 32 left_frame.rowconfigure(4,weight=1) 33 left_frame.rowconfigure(5,weight=1) 34 left_frame.rowconfigure(6,weight=1) 35 36 #right_frameのconfigure 37 right_frame.columnconfigure(0, weight=1) 38 right_frame.rowconfigure(0, weight=1) 39 right_frame.rowconfigure(1, weight=1) 40 right_frame.rowconfigure(2, weight=1) 41 right_frame.rowconfigure(3, weight=1) 42 right_frame.rowconfigure(4, weight=1) 43 right_frame.rowconfigure(5, weight=1) 44 right_frame.rowconfigure(6, weight=1) 45 46 #under_frameのconfigue 47 under_frame.columnconfigure(0, weight=1) 48 under_frame.columnconfigure(1, weight=1) 49 under_frame.columnconfigure(2, weight=1) 50 51 """left_frame""" 52 #各ラベル 53 number_label = tk.Label(left_frame, text='書誌番号') 54 title_label = tk.Label(left_frame, text='タイトル') 55 author_label = tk.Label(left_frame, text='著者') 56 time_label = tk.Label(left_frame, text='出版年') 57 publisher_label = tk.Label(left_frame, text='出版社') 58 type_label = tk.Label(left_frame, text='形態') 59 janle_label = tk.Label(left_frame, text='ジャンル') 60 61 labels = [number_label, title_label, author_label, time_label, publisher_label, type_label, janle_label] 62 for i, label in enumerate(labels): 63 label.grid(row=i, column=0) 64 65 #各entry 66 number_entry = tk.Entry(left_frame) 67 title_entry = tk.Entry(left_frame) 68 author_entry = tk.Entry(left_frame) 69 time_entry = tk.Entry(left_frame) 70 publisher_entry = tk.Entry(left_frame) 71 72 entrys = [number_entry, title_entry, author_entry, time_entry, publisher_entry] 73 for i, entry in enumerate(entrys): 74 entry.grid(row=i, column=1) 75 76 #combobox 77 type_list = ['1', '2', '3'] 78 type_choice_combo = ttk.Combobox(left_frame, state='readonly', values=type_list) 79 type_choice_combo.current(0) 80 81 #entry 82 janle_entry = tk.Entry(left_frame) 83 84 #combo, entry設置 85 type_choice_combo.grid(column=1, row=5) 86 janle_entry.grid(column=1, row=6) 87 88 89 """right_frame""" 90 #上右側:テキストフィールド UI生成・設置・データ反映 91 note_label = tk.Label(right_frame, text='note') 92 note_label.grid(row=0, column=0) 93 94 note_area = tk.Text(right_frame) 95 note_area.grid(row=1, column=0, rowspan=6) 96 97 98 #under_frame 99 renew_bt = tk.Button(under_frame, text='データ更新', command=None) 100 delete_bt = tk.Button(under_frame, text='データ削除', command=None) 101 new_save_bt = tk.Button(under_frame, text='新規作成', command=None) 102 103 renew_bt.grid(row=0, column=0) 104 delete_bt.grid(row=0, column=1) 105 new_save_bt.grid(row=0, column=2) 106 107 #フレーム設置 108 left_frame.grid(row=0, column=0) 109 right_frame.grid(row=0, column=1) 110 up_frame.grid(row=0, column=0) 111 under_frame.grid(row=1, column=0) 112 113 window.mainloop()
試したこと
記述の順番の入れ替えや、configureでの設定比率の調整を試みましたが、改善されませんでした。
回答2件
あなたの回答
tips
プレビュー