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

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

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

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

Python

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

Q&A

解決済

2回答

962閲覧

Pythonで、Tkinterのplaceが効いていない

退会済みユーザー

退会済みユーザー

総合スコア0

Tkinter

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

Python

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

0グッド

0クリップ

投稿2019/05/04 05:06

Python初心者です

今、Pythonで日記アプリを作ろうと思っているのですが、月日を入力するEntryの位置をplaceで指定したのにも関わらずデフォルト位置になっています

コードはこちらです

Python

1import tkinter as tk 2import datetime as dt 3 4path = 'パス' 5win = tk.Tk() 6 7win.title("日記") 8win.geometry("400x400") 9 10 11 12month = tk.Entry(width=2) 13month.insert(tk.END, '月') 14month.place(x=150,y=5) 15month.pack() 16 17date = tk.Entry(width=2) 18date.insert(tk.END, '日') 19date.place(x=250, y=5) 20date.pack() 21 22title = tk.Entry(width=50) 23title.pack() 24title.insert(tk.END, "タイトル") 25 26 27tx = tk.Text() 28tx.pack() 29 30path = path + '/' + title.get() + '.txt' 31 32def ok_click(): 33 c = tx.get(1.0,tk.END) 34 s = title.get() + '\n\n' + c 35 with open(path, mode='w') as f: 36 f.write(s) 37 38 39okButton = tk.Button(win, text='保存', command=ok_click) 40okButton.pack() 41 42win.mainloop() 43

実行結果です
実行結果

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

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

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

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

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

guest

回答2

0

ベストアンサー

placeとpackはともに配置用の関数なので、どちらか一方しか機能しません。今回の場合、pack(widgetを立て1列に並べる)が働いているために、デフォルト位置になっているのでしょう。

ですので、packを消した上で、タイトル(title)・テキスト(tx)・ボタン(onclick)の位置をplace関数で設定するのが良いかと思います。

以下に、変更例を提示します。
※便宜上、テキストの大きさもこちら側で設定しております。

import tkinter as tk import datetime as dt path = 'パス' win = tk.Tk() win.title("日記") win.geometry("400x400") month = tk.Entry(width=2) month.insert(tk.END, '月') month.place(x=150,y=5) #month.pack() date = tk.Entry(width=2) date.insert(tk.END, '日') date.place(x=250, y=5) #date.pack() title = tk.Entry(width=50) title.place(x=50,y=30) #title.pack() title.insert(tk.END, "タイトル") tx = tk.Text(width=50,height=10) tx.place(x=20, y=60) #tx.pack() path = path + '/' + title.get() + '.txt' def ok_click(): c = tx.get(1.0,tk.END) s = title.get() + '\n\n' + c with open(path, mode='w') as f: f.write(s) okButton = tk.Button(win, text='保存', command=ok_click) okButton.place(x=190, y=200) #okButton.pack() win.mainloop()

回答する上で参考にした記事を載せておきます。

2. Widget を配置しよう

ご参考になれば幸いです。

投稿2019/05/04 13:14

amahara_waya

総合スコア1029

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

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

退会済みユーザー

退会済みユーザー

2019/05/05 11:47

ありがとうございます!
guest

0

おはようございます。

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

placeを利用した後に、packを記述しているため、packが優先されてうまくいっていないようです。

こんな感じで修正するといいでしょう。

python

1import tkinter as tk 2 3 4# 日記の内容を保存する関数 5def ok_click(): 6 # 日記のタイトルを取得。 7 titleText = title.get() 8 # ファイルの保存先を設定 9 path = '/path_to/' + titleText + '.txt' 10 # 日記の内容を取得する。 11 # tk.END : 末尾 12 content = tx.get(1.0, tk.END) 13 # 日記のタイトルと日記の内容を結合する。 14 output = titleText + '\n\n' + content 15 # ファイルを作成して、日記の内容を書き込む。 16 with open(path, mode='w') as f: 17 f.write(output) 18 19 20win = tk.Tk() 21 22# Windowへタイトルをつける。 23win.title("日記") 24# Windowの画面サイズを設定する。 25# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 26win.geometry("400x400") 27 28# Windowを親要素として、entry Widgetを作成する。 29# width : 幅の設定 30# Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 31month = tk.Entry(win, width=2) 32# entry Widget(month)の末尾へ値を格納する。 33# tk.END : 末尾 34month.insert(tk.END, '月') 35# Windowを親要素とした場合に、entry Widgetをどのように配置するのか? 36# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 37month.place(x=150, y=5) 38 39# Windowを親要素として、entry Widgetを作成する。 40# width : 幅の設定 41# Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 42date = tk.Entry(win, width=2) 43# entry Widget(date)の末尾へ値を格納する。 44# tk.END : 末尾 45date.insert(tk.END, '日') 46# Windowを親要素とした場合に、entry Widgetをどのように配置するのか? 47# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 48date.place(x=250, y=5) 49 50# Windowを親要素として、entry Widgetを作成する。 51# width : 幅の設定 52# Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 53title = tk.Entry(win, width=50) 54# entry Widget(title)の末尾へ値を格納する。 55# tk.END : 末尾 56title.insert(tk.END, "タイトル") 57# Windowを親要素とした場合に、entry Widgetをどのように配置するのか? 58# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 59title.pack() 60 61# Windowを親要素として、text Widgetを作成する。 62# Textについて : https://kuroro.blog/python/bK6fWsP9LMqmER1CBz9E/ 63tx = tk.Text(win) 64# Windowを親要素とした場合に、text Widgetをどのように配置するのか? 65# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 66tx.pack() 67 68# Windowを親要素として、button Widgetを作成する。 69# text : テキスト情報 70# command : ボタンをクリックした場合に、実行する関数を設定 71# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 72okButton = tk.Button(win, text='保存', command=ok_click) 73# Windowを親要素とした場合に、button Widgetをどのように配置するのか? 74# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 75okButton.pack() 76 77# Windowをループさせて、継続的にWindow表示させる。 78# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 79win.mainloop()

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

投稿2021/06/14 22:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問