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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

11411閲覧

python,tkinter : frameを横に並べるにはどうしたらいいですか?

unpi

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2018/06/05 02:28

python

1import tkinter 2 3root = tkinter.Tk() 4root.title("main window") 5root.geometry("220x300") 6 7 8frame1 = tkinter.Frame(root, padx=20, pady=20, bd=3, 9 relief="ridge", height=8, width=10, bg="#aaaaaa") 10frame1.pack(anchor=tkinter.NW) 11 12button1 = tkinter.Button(frame1, text="button1", 13 height=1, width=5, bg="#111111") 14button1.pack() 15 16 17frame2 = tkinter.Frame(root, bd=3, relief="ridge", padx=10, pady=10, 18 height=8, width=10, bg="#cccccc") 19frame2.pack(anchor=tkinter.NE) 20 21button2 = tkinter.Button(frame2, text="button2↑", height=1, width=5) 22button2.pack() 23 24 25frame3 = tkinter.LabelFrame(root, bd=3, relief="ridge", padx=20, pady=35, bg="#dddddd") 26frame3.pack(anchor=tkinter.NW) 27 28button3 = tkinter.Button(frame3, text="button3", height=1, width=5) 29button3.pack() 30 31 32root.mainloop() 33

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

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

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

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

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

guest

回答2

0

ベストアンサー

他の場合だと「リファレンスを見てほしい」と言いたくなる閲覧者の人が多くなる質問にも見えますが、あえて回答してみます。(理由は余談参照)

Tkinterでウィジェットを配置するにはpack/gridの2通りの戦略があるようです。ご質問ではpackを用いておられますが、sideオプションを試してみてください。自分はファンレスだけ見てもどう配置されるかすぐにピンとこなかったので、以下のようなコードを書いて使い方を把握しました。packする順番とsideの指定によってどこにどう配置されるかがわかると思います。sideを指定しないと'top'が仮定されるようですね。(配置領域の見易さのためfill=tk.BOTH, expand=Trueを指定している点に注意してください)

Python

1import tkinter as tk 2 3root = tk.Tk() 4colors=('#F88', '#8F8', '#88F') 5for i, side in enumerate(['left', None, 'left', 'right', 'bottom', 'right', None]): 6 widget = tk.Label(root, text='{}:{}'.format(i, side), bg=colors[i % 3], bd=2) 7 widget.pack(side=side, fill=tk.BOTH, expand=True) 8 9root.mainloop()

イメージ説明

余談:Tkinterの仕様について
公式リファレンスには一部しか載っておらず「Tcl/Tkを勉強した上でtkinterの使い方を想像してください」なんて書いてあります。しょうがないので公式から参照されている参考サイトを見るわけですが、どれも完全なリファレンスとは言い難い印象です。

  • Tcl/Tkを知っているわけではない
  • TkinterでGUIを手軽に作りたい

というPythonプログラマー(自分がそう)にとっては「参考書」を入手するのが一番よいのかも知れません。

自分はケチなので参考書は買わず、インターネット上で以下のようなページを参照してますが...

packer:
https://docs.python.jp/3/library/tkinter.html#packer-options
grid:
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/grid.html

投稿2018/06/05 03:45

KSwordOfHaste

総合スコア18392

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

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

KSwordOfHaste

2018/06/05 04:19

あ・・・pack/gridの他にplaceで絶対位置を指定する方法もあったかもです。しかし自分は絶対位置を指定する方法はまず使いません。座標を自分で計算するなんて面倒ですし、後から画面構成を変えたくなったとき悲惨ですので・・・
unpi

2018/06/05 09:01

なるほど! 未熟ですが確かに悲惨そうな気がします。
guest

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter 2 3root = tkinter.Tk() 4 5# Windowのタイトルを設定する。 6root.title("main window") 7# Windowの画面サイズを設定する。 8# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 9root.geometry("220x300") 10 11# Windowを親要素として、frame Widgetを作成する。 12# padx, pady : 枠の内側へ空白の幅を持たせる。 13# bd : 枠の大きさの設定 14# relief : デザインを設定 15# height : 高さの設定 16# width : 幅の設定 17# bg : 背景色の設定 18# 色の設定を変更する場合 : http://www.tcl.tk/man/tcl/TkCmd/colors.htm 19# Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/ 20frame1 = tkinter.Frame(root, padx=20, pady=20, bd=3, 21 relief="ridge", height=8, width=10, bg="#aaaaaa") 22# Windowを親要素として、frame Widgetをどのように配置するのか? 23# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 24frame1.pack(side=tkinter.LEFT) 25 26# frame Widget(Frame)を親要素として、button Widgetを作成する。 27# text : テキスト情報 28# height : 高さの設定 29# width : 幅の設定 30# bg : 背景色の設定 31# 色の設定を変更する場合 : http://www.tcl.tk/man/tcl/TkCmd/colors.htm 32# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 33button1 = tkinter.Button(frame1, text="button1", 34 height=1, width=5, bg="#111111") 35# frame Widget(Frame)を親要素として、button Widgetをどのように配置するのか? 36# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 37button1.pack() 38 39# Windowを親要素として、frame Widgetを作成する。 40# padx, pady : 枠の内側へ空白の幅を持たせる。 41# bd : 枠の大きさの設定 42# relief : デザインを設定 43# height : 高さの設定 44# width : 幅の設定 45# bg : 背景色の設定 46# 色の設定を変更する場合 : http://www.tcl.tk/man/tcl/TkCmd/colors.htm 47# Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/ 48frame2 = tkinter.Frame(root, padx=10, pady=10, bd=3, 49 relief="ridge", height=8, width=10, bg="#cccccc") 50# Windowを親要素として、frame Widgetをどのように配置するのか? 51# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 52frame2.pack(side=tkinter.LEFT) 53 54# frame Widget(Frame)を親要素として、button Widgetを作成する。 55# text : テキスト情報 56# height : 高さの設定 57# width : 幅の設定 58# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 59button2 = tkinter.Button(frame2, text="button2↑", height=1, width=5) 60# frame Widget(Frame)を親要素として、button Widgetをどのように配置するのか? 61# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 62button2.pack() 63 64# Windowを親要素として、frame Widgetを作成する。 65# padx, pady : 枠の内側へ空白の幅を持たせる。 66# bd : 枠の大きさの設定 67# relief : デザインを設定 68# bg : 背景色の設定 69# 色の設定を変更する場合 : http://www.tcl.tk/man/tcl/TkCmd/colors.htm 70# Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/ 71frame3 = tkinter.LabelFrame(root, padx=20, pady=35, 72 bd=3, relief="ridge", bg="#dddddd") 73# Windowを親要素として、frame Widgetをどのように配置するのか? 74# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 75frame3.pack(side=tkinter.LEFT) 76 77# frame Widget(Frame)を親要素として、button Widgetを作成する。 78# text : テキスト情報 79# height : 高さの設定 80# width : 幅の設定 81# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 82button3 = tkinter.Button(frame3, text="button3", height=1, width=5) 83# frame Widget(Frame)を親要素として、button Widgetをどのように配置するのか? 84# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 85button3.pack() 86 87# Windowをループさせて、継続的にWindow表示させる。 88# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 89root.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/10 10:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問