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

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

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

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

button

HTMLで用いる<button>タグです。

Python

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

Q&A

解決済

2回答

507閲覧

Tkinterのボタンの配置を買えたい

Eston

総合スコア67

Tkinter

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

button

HTMLで用いる<button>タグです。

Python

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

0グッド

0クリップ

投稿2020/10/31 01:16

編集2020/10/31 08:15

いつもお世話になっております。
Tkinterでデスクトップアプリを作詞しているのですが、ボタンが思った位置に配置できません。
単純なミスだと思うのですが、placeやgridを使用しても全て中央上部に配置されてしまいます。

Tkinterを触り始めたばかりで、稚拙な質問かも知れませんが、ご助力お願いいたします。

btn_book = ttk.Button(root, text='Book Now',width=10)
btn_book.grid(row=1, column=5)
btn_book.pack()
の部分がワークしません。
.placeも試しましたが、変化はありませんでした。

目標としては、Accomondation Type オプションボタンの横に配置されるイメージです。

どうぞよろしくおねがいします。

Python3

1from tkinter import * 2from tkinter import ttk 3 4#Generate Window 5root = Tk() 6#title 7root.title('Hotel New World') 8#Window Size 9root.geometry("800x800") 10#ウィンドウの最小サイズ 11root.minsize(500, 500) 12#ウィンドウのグリッドを 1x1 にする 13root.grid_rowconfigure(0, weight=1) 14root.grid_columnconfigure(0, weight=1) 15#Create Menu 16menubar = Menu(root) 17#FileMenu 18filemenu = Menu(menubar, tearoff=0) 19menubar.add_cascade(label='File', menu=filemenu) 20#filemenu.add_command(label='Import', command=lambda : changePage(frame1)) 21filemenu.add_command(label='Import') 22filemenu.add_command(label='Export Data') 23filemenu.add_separator() 24#close button ok 25filemenu.add_command(label='Quit Application', command=lambda : root.destroy()) 26#HelpMenu 27helpmenu = Menu(menubar, tearoff=0) 28menubar.add_cascade(label='Help', menu=helpmenu) 29helpmenu.add_command(label='About Application') 30helpmenu.add_command(label='Developer Information') 31#Display Menu 32root.config(menu = menubar) 33 34label_name = Label(root, text="Name",width=20,font=("bold", 10)) 35label_name.place(x=10,y=10) 36 37entry_name = Entry(root) 38entry_name.place(x=100,y=10) 39 40label_country = Label(root, text="Country",width=20,font=("bold", 10)) 41label_country.place(x=310,y=10) 42 43entry_country = Entry(root) 44entry_country.place(x=400,y=10) 45 46label_gender = Label(root, text="Gender",width=20,font=("bold", 10)) 47label_gender.place(x=10,y=60) 48var = IntVar() 49Radiobutton(root, text="Male",padx = 5, variable=var, value=1).place(x=100,y=60) 50Radiobutton(root, text="Female",padx = 20, variable=var, value=2).place(x=200,y=60) 51 52label_passport = Label(root, text="Passport",width=20,font=("bold", 10)) 53label_passport.place(x=10,y=110) 54 55entry_passport = Entry(root) 56entry_passport.place(x=100,y=110) 57 58label_from = Label(root, text="From",width=20,font=("bold", 10)) 59label_from.place(x=10,y=150) 60 61entry_from_start = Entry(root) 62entry_from_start.place(x=100,y=150) 63 64label_txt_to = Label(root, text="to",width=20,font=("bold", 10)) 65label_txt_to.place(x=270,y=150) 66 67entry_from_end = Entry(root) 68entry_from_end.place(x=400,y=150) 69 70label_accomondation_type = Label(root, text="Accomondation Type",width=20,font=("bold", 10)) 71label_accomondation_type.place(x=10,y=200) 72 73menu_accom = OptionMenu(root, 'Accomondations', 'Male Dorm','Female Form','Doble Room','Single Room') 74menu_accom.config(width=20) 75menu_accom.place(x=250, y=200) 76 77btn_book = ttk.Button(root, text='Book Now',width=10) 78btn_book.grid(row=1, column=5) 79btn_book.pack() 80 81#ウィンドウ表示 82root.mainloop()

↓現状
現状

↓目標物
目標物

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

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

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

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

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

guest

回答2

0

ベストアンサー

目標物のデザインを見ると、全部gridでいけそうですよね。例えばこんな感じで。

Python

1import tkinter as tk 2# from tkinter import ttk 3 4# Generate Window 5root = tk.Tk() 6# title 7root.title('Hotel New World') 8# Window Size 9root.geometry("800x800") 10# ウィンドウの最小サイズ 11root.minsize(500, 500) 12# ウィンドウのグリッドを 1x1 にする 13# root.grid_rowconfigure(0, weight=1) 14root.grid_columnconfigure(0, weight=1) 15 16frame1 = tk.Frame(root, width=800, height=800, 17 relief='flat', borderwidth=1) 18frame1.grid(row=0, column=0, sticky=(tk.W, tk.E)) 19frame1.grid_columnconfigure(0, weight=1) 20frame1.grid_columnconfigure(1, weight=2) 21frame1.grid_columnconfigure(2, weight=1) 22frame1.grid_columnconfigure(3, weight=2) 23frame1.grid_columnconfigure(4, weight=1) 24frame1.grid_columnconfigure(5, weight=1) 25 26# Create Menu 27menubar = tk.Menu(root) 28 29# FileMenu 30filemenu = tk.Menu(menubar, tearoff=0) 31menubar.add_cascade(label='File', menu=filemenu) 32# filemenu.add_command(label='Import', command=lambda : changePage(frame1)) 33filemenu.add_command(label='Import') 34filemenu.add_command(label='Export Data') 35filemenu.add_separator() 36# close button ok 37filemenu.add_command(label='Quit Application', command=lambda: root.destroy()) 38 39# HelpMenu 40helpmenu = tk.Menu(menubar, tearoff=0) 41menubar.add_cascade(label='Help', menu=helpmenu) 42helpmenu.add_command(label='About Application') 43helpmenu.add_command(label='Developer Information') 44 45# Display Menu 46root.config(menu=menubar) 47 48 49label_name = tk.Label(frame1, text="Name", font=('', 10, "bold")) 50label_name.grid(row=0, column=0) 51 52entry_name = tk.Entry(frame1) 53entry_name.grid(row=0, column=1, sticky=(tk.W, tk.E)) 54 55label_country = tk.Label(frame1, text="Country", font=('', 10, "bold")) 56label_country.grid(row=0, column=2) 57 58entry_country = tk.Entry(frame1) 59entry_country.grid(row=0, column=3, columnspan=2, sticky=(tk.W, tk.E)) 60 61label_passport = tk.Label(frame1, text="Passport", font=('', 10, "bold")) 62label_passport.grid(row=1, column=0) 63 64entry_passport = tk.Entry(frame1) 65entry_passport.grid(row=1, column=1, sticky=(tk.W, tk.E)) 66 67label_gender = tk.Label(frame1, text="Gender", font=('', 10, "bold")) 68label_gender.grid(row=1, column=2) 69var = tk.IntVar() 70tk.Radiobutton(frame1, text="Male", variable=var, value=1).grid(row=1, column=3) 71tk.Radiobutton(frame1, text="Female", variable=var, value=2).grid(row=1, column=4) 72 73label_from = tk.Label(frame1, text="From", font=('', 10, "bold")) 74label_from.grid(row=2, column=0) 75 76entry_from_start = tk.Entry(frame1) 77entry_from_start.grid(row=2, column=1, sticky=(tk.W, tk.E)) 78 79label_to = tk.Label(frame1, text="to", font=('', 10, "bold")) 80label_to.grid(row=2, column=2) 81 82entry_to_end = tk.Entry(frame1) 83entry_to_end.grid(row=2, column=3, columnspan=2, sticky=(tk.W, tk.E)) 84 85label_accomondation_type = tk.Label(frame1, text="Accomondation Type", font=('', 10, "bold")) 86label_accomondation_type.grid(row=3, column=0) 87 88menu_accom = tk.OptionMenu(frame1, 'Accomondations', 'Male Dorm', 'Female Form', 'Doble Room', 'Single Room') 89menu_accom.config(width=20) 90menu_accom.grid(row=3, column=1, sticky=(tk.W, tk.E)) 91 92btn_book = tk.Button(frame1, text='Book Now', width=10) 93btn_book.grid(row=3, column=4, sticky=tk.E) 94 95# ウィンドウ表示 96root.mainloop()

サンプル

投稿2020/10/31 02:39

Daregada

総合スコア11990

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

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

Eston

2020/10/31 07:01

丁寧な解答、ありがとうございます。 ところで、私はMacを使用して開発しているのですが、Book Nowの部分の文字がクリック時のみ表示されます。 これはおそらくMac的な問題ですか?
guest

0

コードが崩れてるので編集で修正お願いします。
インデントがなかったので、推測可能な範囲で実行は出来ましたが。

追記: 投稿と入れ違いで修正を確認


Accomondation の y 座標が 200 なので、
place() で配置するなら、y=200 x は適宜調整します。

python

1btn_book.place(x=500, y=200)

btn_book.grid(row=1, column=5)
btn_book.pack()
の部分がワークしません。

pack/grid を使う場合、
他のウィジェットもpack/gridでレイアウトで管理するように変更が必要です。
共通の親を持つウィジェットは、すべて同じレイアウトで管理してください。
place でのレイアウトは、主にサイズ固定でレイアウトを組む時に使います。

投稿2020/10/31 01:35

編集2020/10/31 01:36
teamikl

総合スコア8664

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問