質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2916閲覧

tkinterで、frameを左右に並べたときの余白について

hijiri

総合スコア61

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/26 00:26

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()

やりたいことは、テキストボックスを左端に、右側は青のフレームで埋め尽くしたいです。
つまり、緑の部分をなくしたいのです。
そして、横のウィンドウ幅を変更しても青のフレームの横幅のみ伸縮するようにして、緑の部分は常に一切見えないようにしたいと考えています。

しかし、上記コードでは、緑の部分が見えていて、ウィンドウ幅を変更すると緑の部分も伸縮してしまいます。
常に緑の部分が見えないようにするにはどうしたらよろしいでしょうか?

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nto

2020/08/26 06:39 編集

結論左側に緑が配置されない様にしたいというのはわかりましたが その他に何点か気になる点があります。 ・左端と右側、という説明ならば真ん中もあるという事でしょうか? ・現状、真ん中にも緑がある(様に見える)部分についてはどうしたいという事でしょうか? よろしければ目的とする形の色の羅列の順番を教えて下さい。 例. 左からテキストエリア(隠れているが赤),緑,青 または左からテキストエリア(隠れているが赤),青など。 目的とする形がいまいちわからず回答し難いのですが、それらはpackのオプションにanchorを付与してあげる事で実現は出来ませんか?
hijiri

2020/08/26 07:27

御返事ありがとうございます。 わかりにく説明で申し訳ありません。 現状は、左側から、 緑→白→緑→青 かと思います。 それを、 白(textのwidth=20の幅)→青(残り全部の幅) というようにしたいと思っています。 class Leftのpackにanchor="w"を付与しても、 白→緑→青 のなってしまい、真ん中の緑が邪魔です。 何が悪いのかがわかりません。 もしわかりましたら、どうぞよろしくお願いいたします。
nto

2020/08/27 03:06

それってlabel = tk.Text(self, width=20)をclass Rightの中に配置し labelのpackオプションにanchor="w" left = Left(main)はコメントアウトではダメなのでしょうか? 赤フレームはどうしても必要という事でしょうか?
hijiri

2020/08/27 04:16

今回の場合は質問しやすくするために、構成を最小限にしました。 本来のものは、赤フレームと青フレームの中に複数のwidgetを配置しています。 ですので、わかりやすくするために赤フレームと青フレーム(右と左のフレーム)に分けて作りたいと考えています。 おっしゃるように1つのフレームの中に全部配置してしまえば望み通りの挙動になるのですが、フレームを2つ左右に並べたときに、なぜこのような余白(緑の部分)ができてしまうのかがわかりません。
hijiri

2020/08/27 09:24

色々試してみた結果、class Leftのpackオプションの、「expand」が邪魔をしていました。 それを削除したところ、希望通りの結果になりました。 なぜexpandを入れると、横幅の余白ができるのかはいまいちわからないのですが、なんとか解決いたしました。 お手数をおかけして申し訳ありませんでした。
guest

回答1

0

自己解決

class Leftのpackのオプションの「expand」を削除することで、希望通りの挙動を得ることができました。

投稿2020/08/27 09:25

hijiri

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問