python
1import tkinter as tk 2import tkinter.ttk as ttk 3 4class Main(tk.Frame): 5 def __init__(self, root): 6 super().__init__(root, bg="green") 7 self.pack(expand=1, fill=tk.BOTH) 8 9class Left(tk.Frame): 10 def __init__(self, frame): 11 super().__init__(frame, bg="red") 12 self.pack(expand=1, fill=tk.Y, side="left") 13 label = tk.Text(self, width=20) 14 label.pack(expand=1, fill=tk.Y) 15 16 17class Right(tk.Frame): 18 def __init__(self, frame): 19 super().__init__(frame, bg="blue") 20 self.pack(expand=1, fill=tk.BOTH, side="left") 21 22root = tk.Tk() 23root.geometry('950x750') 24main = Main(root) 25left = Left(main) 26right = Right(main) 27 28root.mainloop()
やりたいことは、テキストボックスを左端に、右側は青のフレームで埋め尽くしたいです。
つまり、緑の部分をなくしたいのです。
そして、横のウィンドウ幅を変更しても青のフレームの横幅のみ伸縮するようにして、緑の部分は常に一切見えないようにしたいと考えています。
しかし、上記コードでは、緑の部分が見えていて、ウィンドウ幅を変更すると緑の部分も伸縮してしまいます。
常に緑の部分が見えないようにするにはどうしたらよろしいでしょうか?
どうぞよろしくお願いいたします。
結論左側に緑が配置されない様にしたいというのはわかりましたが
その他に何点か気になる点があります。
・左端と右側、という説明ならば真ん中もあるという事でしょうか?
・現状、真ん中にも緑がある(様に見える)部分についてはどうしたいという事でしょうか?
よろしければ目的とする形の色の羅列の順番を教えて下さい。
例.
左からテキストエリア(隠れているが赤),緑,青
または左からテキストエリア(隠れているが赤),青など。
目的とする形がいまいちわからず回答し難いのですが、それらはpackのオプションにanchorを付与してあげる事で実現は出来ませんか?
御返事ありがとうございます。
わかりにく説明で申し訳ありません。
現状は、左側から、
緑→白→緑→青
かと思います。
それを、
白(textのwidth=20の幅)→青(残り全部の幅)
というようにしたいと思っています。
class Leftのpackにanchor="w"を付与しても、
白→緑→青
のなってしまい、真ん中の緑が邪魔です。
何が悪いのかがわかりません。
もしわかりましたら、どうぞよろしくお願いいたします。
それってlabel = tk.Text(self, width=20)をclass Rightの中に配置し
labelのpackオプションにanchor="w"
left = Left(main)はコメントアウトではダメなのでしょうか?
赤フレームはどうしても必要という事でしょうか?
今回の場合は質問しやすくするために、構成を最小限にしました。
本来のものは、赤フレームと青フレームの中に複数のwidgetを配置しています。
ですので、わかりやすくするために赤フレームと青フレーム(右と左のフレーム)に分けて作りたいと考えています。
おっしゃるように1つのフレームの中に全部配置してしまえば望み通りの挙動になるのですが、フレームを2つ左右に並べたときに、なぜこのような余白(緑の部分)ができてしまうのかがわかりません。
色々試してみた結果、class Leftのpackオプションの、「expand」が邪魔をしていました。
それを削除したところ、希望通りの結果になりました。
なぜexpandを入れると、横幅の余白ができるのかはいまいちわからないのですが、なんとか解決いたしました。
お手数をおかけして申し訳ありませんでした。
回答1件
あなたの回答
tips
プレビュー