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

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

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

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

Python

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

Q&A

解決済

1回答

1070閲覧

Python Tkinter Gridで場所を指定したものが勝手に動いてしまう

ngh_orange

総合スコア17

Tkinter

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

Python

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

1グッド

0クリップ

投稿2021/04/28 03:34

ソフト全体から見てしようとしていること

PythonでTkinterを使いGUIのアプリケーションを作ろうと思っています
画面下半分の白枠で囲んでいる場所をコントロールパネルとして、そこで設定ができるようにしたいです

コードの内容の状況

今作っているものが、ファイル名変更と出力パスの設定欄で、それぞれをctrlnameFrmとctrlpassFrmとしています
コントロールパネルにctrlpanelFrmという大きなフレームを設定して、そこにctrlnameFrameとctrlpassFrmを入れています。

この質問で聞きたいこと

イメージ説明
上の写真のような表示にしたいです。
しかし、パスの取得の右側のテキスト欄の文字数が多いと
イメージ説明
このように上のctrlnameFrmのほうが影響を受けてしまいます

質問です、これを、他のフレームの内容に影響を受けなくさせ、青いテキスト欄の文字数に関係なく場所を固定する方法はありますでしょうか?
自分の中では、ctrlnameFrmとctrlpassFrmでフレーム分しているから影響を受けないのでは?と思っています

補足

真ん中の赤い空白は、2つの間に空白を入れたかったので空のrowを入れてます。色はわかりやすくするためです

コード

以下コードになります。
初心者のため非常にコードが汚いですが、とりあえず目的の動きができればいいと思っているので大目に見てくださると嬉しいです

Python

1import tkinter as tk 2import tkinter.ttk as ttk 3 4### この下に関数を書く ### 5 6 7if __name__ == "__main__": 8 # メインウィンドウ 9 mainw = tk.Tk() 10 mainw.title("Devname GreenTea") 11 mainw.geometry("640x300") 12 mainw.resizable(0, 0) 13 mainw.configure(bg="gray72") 14 15 ### この下に描画内容を書く ### 16 wrpFrm = tk.Frame(mainw) 17 wrpFrm.configure(bg="gray72") 18 wrpFrm.pack(padx=3, pady=3, fill="both", expand=1) 19 20 # URLリスト 21 22 urllist = ttk.Treeview(wrpFrm) 23 urllist.configure(column=(1, 2), show="headings", height=6) 24 urllist.column(1, width=30) 25 urllist.column(2, width=400) 26 urllist.heading(1, text="No") 27 urllist.heading(2, text="URLリスト") 28 urllist.pack(anchor="nw") 29 30 # ライトフレーム 31 32 rightFrm = tk.Frame(wrpFrm) 33 rightFrm.configure(bg="gray72") 34 rightFrm.place(width=200, height=145, x=435, y=1) 35 getbtn1 = tk.Button(rightFrm) 36 getbtn1.configure(text="取得") 37 getbtn1.pack(anchor="e", 38 pady=(35, 5), padx=(0, 5), 39 ipadx=15, ipady=1) 40 getbtn2 = tk.Button(rightFrm) 41 getbtn2.configure(text="未定") 42 getbtn2.pack(anchor="e", 43 pady=(15, 5), padx=(0, 5), 44 ipadx=15, ipady=1) 45 46 # 余白 47 48 noneFrm = tk.Frame(wrpFrm) 49 noneFrm.configure(bg="gray72") 50 noneFrm.pack(padx=3, pady=5, fill="both") 51 52 # コントロールパネル 53 54 ctrlpanelFrm = tk.Frame(wrpFrm) 55 ctrlpanelFrm.configure(bg="white") 56 ctrlpanelFrm.pack(padx=2, pady=3, fill="both", expand=1) 57 58 # ここからファイル名変更欄 59 60 ctrlnameFrm = tk.Frame(ctrlpanelFrm) 61 ctrlnameFrm.configure(bg="white") 62 ctrlnameFrm.grid(row=0, column=0) 63 64 filenamechg = tk.BooleanVar() 65 filenamechg.set(True) 66 filenamechg = tk.Checkbutton(ctrlnameFrm) 67 filenamechg.configure( 68 text="ファイル名を変更する", 69 variable=filenamechg, 70 bg="white") 71 filenamechg.grid(row=0, column=0, columnspan=2, sticky="w") 72 73 filenamelbl1 = tk.Label(ctrlnameFrm) 74 filenamelbl1.configure(text="ファイル名", bg="white") 75 filenamelbl1.grid(row=1, column=0) 76 77 filenameinput = tk.Entry(ctrlnameFrm) 78 filenameinput.insert("end", "download") 79 filenameinput.configure(bg="white") 80 filenameinput.grid(row=1, column=1, columnspan=1, sticky="w") 81 # ここまでファイル名変更欄 82 83 # 余白 84 ctrlnonelabel = tk.Label(ctrlpanelFrm) 85 ctrlnonelabel.configure(text=" ", bg="red") 86 ctrlnonelabel.grid(row=1, column=0) 87 88 # ここからパス設定欄 89 ctrlpassFrm = tk.Frame(ctrlpanelFrm) 90 ctrlpassFrm.configure(bg="red") 91 ctrlpassFrm.grid(row=2, column=0, sticky="w") 92 93 ctrlpasschk = tk.BooleanVar() 94 ctrlpasschk.set(True) 95 ctrlpasschk = tk.Checkbutton(ctrlpassFrm) 96 ctrlpasschk.configure( 97 text="パスを自分で設定する", 98 variable=ctrlpasschk, 99 bg="white") 100 ctrlpasschk.grid(row=0, column=0, columnspan=2, sticky="w") 101 102 getpass = tk.Button(ctrlpassFrm) 103 getpass.configure(text="パスの取得") 104 getpass.grid(row= 1, column = 0,sticky = "w") 105 106 passname = tk.Label(ctrlpassFrm) 107 passname.configure(text="C:\inetpub", bg="blue") 108 passname.grid(row=1,column=1,columnspan=1,sticky = "w") 109 110 111 112 # ここまでパス設定欄 113 114 115# 描画 116mainw.mainloop() 117
teamikl👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

自分の中では、ctrlnameFrmとctrlpassFrmでフレーム分しているから影響を受けないのでは?

双方とも、ctrlpanelFrm 内にgrid()で格子状に配置されています。

これが例えば、pack() での配置であれば互いに独立した配置にできますが、
grid() の場合は、列幅を揃えることになるので、影響を受けます。

影響には、「レイアウト可能な領域の配分」と「ウィジェットの伸縮方向」
があり、前者への影響はレイアウトの仕組み上避けられませんが、配置位置は、
今回の場合であれば後者の設定 sticky により個別に対応可能です。

解決策: 左寄せ指定
ctrlnameFrm.grid(row=0, column=0, sticky="w")

ctrlpassFrm では設定済。省略時は中央配置。


追記: ファイル等の場所を表すパスは、pass -> path です。

投稿2021/04/28 06:26

編集2021/04/28 06:28
teamikl

総合スコア8760

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

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

ngh_orange

2021/04/28 06:57

たったその一言だけで済んでしまう問題だったのですね.... 回答ありがとうございます!自分でやってみたところ解決しました! path....なんて恥ずかしい、ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問