pythonでGUIを作成しています。
機能の一部に、アカウント名とメールアドレスを任意の数記入する場所を作りたいと思っています。
2点問題があります。
1.フレームの横幅が自動で調整されない。
windowsとMacで同じソースコードなのに、必要な横幅が違いました。
そこで、widthを指定してないでcframe2
の横幅で作成したいのですが、方法が見つかりません。
- canvas とその中に作ったwindowとの問題だと思うのですが
スクロール前のcanvas内を選択すると出てくる黒枠からwindowがはみ出てしまいます。
スクロールしたらNo.10のところは綺麗に納まっています。
これを綺麗に枠内に納めるにはどこの調整したらいいのでしょうか?
canvas7.create_window((10, 10), window=cframe2, anchor="ne")
ここの(10,10)をいじっても上手くいきませんでした。
宜しくお願いします。
python3
1 2 3# tkinter 4from tkinter import * 5import tkinter as tk 6 7class Application(Frame): 8 9 def __init__(self, master=None): 10 Frame.__init__(self,master) 11 master.configure(bg="white") 12 self.pack() #描写 13 self.create_widgets(master) #フォームの作成 14 15 16 17 #フォームの作成 18 def create_widgets(self,master): 19 20 """ 21 スクロールバー Canvas 22 """ 23 24 # フォルダー表示 フレーム 25 Frm5 = Frame(master,bg="blue") 26 Frm5.bind("<Configure>", self.on_resize) 27 28 29 self.canvas7 = Canvas(Frm5 ,bg="white" , height=170) 30 31 32 bar = Scrollbar(Frm5, orient=VERTICAL) 33 bar.grid(row=0, column=1, sticky="ns") 34 bar.config(command=self.canvas7.yview) 35 bar.propagate(False) 36 37 38 Frm5.grid_columnconfigure(0, weight=1) 39 Frm5.pack(padx=10 ,pady=5 , fill="both") 40 41 # Canvas Widget を配置 42 cframe2=Frame(self.canvas7 ,bg="red") 43 self.minicanca = self.canvas7.create_window((10, 10), window=cframe2, anchor="nw") 44 self.canvas7.config(yscrollcommand=bar.set) 45 self.canvas7.grid(row=0, column=0, padx=10 ,pady=5,sticky="we") 46 47 48 49 self.Widget_items = [] 50 51 52 """ 53 アカウント名 , アイコンパス , メールアドレス , アイコン画像 ヘッダー 54 """ 55 # アカウント名 ラベル 56 L_no = tk.Label(cframe2,font=("12")) 57 L_no.configure(text="No", bg="white") 58 L_no.grid(row=0, column=0 ,pady=5,padx=5) 59 60 # アカウント名 ラベル 61 L_account = tk.Label(cframe2,font=("12")) 62 L_account.configure(text="アカウント名", bg="white" ) 63 L_account.grid(row=0, column=1,pady=5,padx=5) 64 65 # アイコンのファイル名 ラベル 66 L_account = tk.Label(cframe2,font=("12")) 67 L_account.configure(text="アイコンのファイル名", bg="white" ) 68 L_account.grid(row=0, column=2,pady=5,padx=5) 69 70 # メールアドレス ラベル 71 L_mail = tk.Label(cframe2,font=("12")) 72 L_mail.configure(text="メールアドレス", bg="white" ) 73 L_mail.grid(row=0, column=3 ,pady=5,padx=5) 74 75 76 77 """ 78 アカウント名 , アイコンパス , メールアドレス , アイコン画像 79 """ 80 81 self.Widget_items = [] 82 83 for i in range(10): 84 items = [] 85 86 # アカウント名 ラベル 87 self.L_no1 = tk.Label(cframe2) 88 self.L_no1.configure(text=f"{i+1}", bg="white") 89 self.L_no1.grid(row=i +1, column=0) 90 items.append(self.L_no1) 91 92 # アカウント名 テキストボックス 93 Text_aka = StringVar() 94 self.aka_box = Entry(cframe2,textvariable=Text_aka ,width = 25 ,font=("12") ) 95 self.aka_box.grid(row=i +1, column=1, sticky="nw") 96 items.append(self.aka_box) 97 98 99 # アイコンのファイル名とキャンバスのセット 100 ifrma = Frame(cframe2, bg="white") 101 ifrma.grid(row=i +1, column=2, sticky="nw",padx=10) 102 103 # アイコンのファイル名 テキストボックス 104 105 Text_icon = StringVar() 106 self.icon_box = Entry(ifrma,textvariable=Text_icon ,width = 15,font=("12")) 107 self.icon_box.grid(row=0, column=0, sticky="nw") 108 items.append(self.icon_box) 109 110 # アイコンの表示 111 canvas2 = Canvas(ifrma , width=24 , height=24) 112 canvas2.grid(row=0, column=1) 113 items.append(canvas2) 114 115 # アカウント名 テキストボックス 116 Text_mail1 = StringVar() 117 self.mail1_box = Entry(cframe2 , textvariable=Text_mail1 ,width = 25 ,font=("12")) 118 self.mail1_box.grid(row=i +1, column=3, sticky="n") 119 items.append(self.mail1_box) 120 121 self.Widget_items.append(items) 122 123 # canvas scroll 124 self.canvas7.update_idletasks() 125 self.canvas7.config(scrollregion=self.canvas7.bbox("all")) 126 127 128 129 # キャンバスのリサイズ 130 def on_resize(self,event): 131 self.canvas7.itemconfigure(self.minicanca, width=event.width) 132 self.canvas7.config(scrollregion=self.canvas7.bbox("all")) 133 134if __name__ == "__main__": 135 136 root = Tk() 137 app = Application(master=root) 138 app.mainloop() 139 140 141 142 143
#追記
説明不足で申し訳ありません。
フレームに色付けしました。
切れていうというのは、現状の方はもっと右側にも表示しているものがあるのに表示されないということでした。
背景が赤はcframe2
なのですが、これは
self.canvas7.create_window((10, 10), window=cframe2, anchor="nw")
とcreate_windowの時に使用しています。
これが認識されていないのではないかと予想しているのですが、解決方法が分かりません。
色をつけて思ったのですが、
キャンバスないのEntry
をクリックするとcframe2
の外枠が表示されます。
これを消す方法はないのでしょうか?
クリックしていない時は表示されていなません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/24 17:52
2021/02/24 17:57 編集
2021/02/24 17:58
2021/02/24 17:58
2021/02/25 02:20
2021/02/25 06:16