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

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

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

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

Tkinter

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

解決済

Tkinter : stickyを効かせたい

NEKOTABETAI
NEKOTABETAI

総合スコア14

Python 3.x

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

Tkinter

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

1回答

0リアクション

0クリップ

304閲覧

投稿2022/09/25 11:18

前提

Windows10、python 3.8 で tkinterを使ってGUIを作っているのですが、なにが原因でstickyが効いていないのかわかりません。
gridを使ってボタンを配置してます。

実現したいこと

  1. ウィンドウサイズを変化させたときに、ボタンもそれに合わせて大きさを変化させたい
  2. ウィンドウの大きさと同じ(隙間なく)ボタンを配置したい
  3. (できればボタンの大きさも統一したい)

発生している問題・エラーメッセージ

画像の下側、右側の灰色(白?)のところがうまくいっていない部分です。
どれだけ動かしても左端だけはしっかりとくっついています。

イメージ説明

該当のソースコード

python

import tkinter as tk # color DARK_GRAY = ('#202020') LIGHT_GRAY = ('#343434') ORANGE = ('#ff9f0a') SMOKE_WHITE = ('#a5a5a5') WHITE = ('#ffffff') BLACK = ('#000000') class Calclator(tk.Frame): def __init__(self, master=None): super().__init__(master) self.create_widgets() def create_widgets(self): # rayout button_layout = ( # row, col, label, func, color (1, 0, 'MC', self.MC, DARK_GRAY), (1, 1, 'MR', self.MR, DARK_GRAY), (1, 2, 'CE', self.CE, SMOKE_WHITE), (1, 3, '±', self.plu_sub, SMOKE_WHITE), (1, 4, '%', self.percent, SMOKE_WHITE), (1, 5, '÷', self.div, ORANGE), (2, 0, 'MS', self.MS, DARK_GRAY), (2, 1, 'C', self.clear, DARK_GRAY), (2, 2, '7', self.numinput, LIGHT_GRAY), (2, 3, '8', self.numinput, LIGHT_GRAY), (2, 4, '9', self.numinput, LIGHT_GRAY), (2, 5, '×', self.mul, ORANGE), (3, 0, 'M+', self.M_plus, DARK_GRAY), (3, 1, 'M-', self.M_sub, DARK_GRAY), (3, 2, '4', self.numinput, LIGHT_GRAY), (3, 3, '5', self.numinput, LIGHT_GRAY), (3, 4, '6', self.numinput, LIGHT_GRAY), (3, 5, '-', self.sub, ORANGE), (4, 0, '税込', self.in_tax, DARK_GRAY), (4, 1, '税抜', self.out_tax, DARK_GRAY), (4, 2, '1', self.numinput, LIGHT_GRAY), (4, 3, '2', self.numinput, LIGHT_GRAY), (4, 4, '3', self.numinput, LIGHT_GRAY), (4, 5, '+', self.add, ORANGE), (5, 0, '√', self.root, DARK_GRAY), (5, 1, '!', self.fact, DARK_GRAY), (5, 2, '0', self.numinput, LIGHT_GRAY), (5, 3, '00', self.numinput, LIGHT_GRAY), (5, 4, '.', self.point, LIGHT_GRAY), (5, 5, '=', self.equal, ORANGE) ) # create buttons for row, col, label, func, color in button_layout: if color == DARK_GRAY: button = tk.Button(self, text=label, font=('MSゴシック', 15), bg=DARK_GRAY, foreground=WHITE) elif color == LIGHT_GRAY: button = tk.Button(self, text=label, font=('MSゴシック', 20), bg=LIGHT_GRAY, foreground=WHITE) elif color == SMOKE_WHITE: button = tk.Button(self, text=label, font=('MSゴシック', 15), bg=SMOKE_WHITE, foreground=BLACK) elif color == ORANGE: button = tk.Button(self, text=label, font=('MSゴシック', 20), bg=ORANGE, foreground=WHITE) button.grid(column=col, row=row, sticky=(tk.N + tk.S + tk.E + tk.W)) button.bind('<Button-1>', func) self.grid(column=0, row=0, sticky=(tk.N + tk.S + tk.E + tk.W)) # create entry self.numbox = tk.Entry(self, background=BLACK, foreground=WHITE, font=('MSゴシック', 30), justify=tk.RIGHT) self.numbox.insert(tk.END, '0') self.numbox.grid(column=0, columnspan=6, row=0, sticky=(tk.N + tk.S + tk.E + tk.W)) # frame flex for i in range(0, 7): self.columnconfigure(i, weight=1) self.rowconfigure(i, weight=1) # window flex self.master.columnconfigure(0, weight=1) self.master.rowconfigure(0, weight=1) # events def numinput(self, e): pass def add(self, e): pass def sub(self, e): pass def mul(self, e): pass def div(self, e): pass def equal(self, e): pass def clear(self, e): pass def point(self, e): pass def MC(self, e): pass def MR(self, e): pass def MS(self, e): pass def M_plus(self, e): pass def M_sub(self, e): pass def in_tax(self, e): pass def out_tax(self, e): pass def root(self, e): pass def plu_sub(self, e): pass def CE(self, e): pass def percent(self, e): pass def fact(self, e): pass # main def main(): root = tk.Tk() root.title('電卓') root.geometry('400x600') calc = Calclator(root) calc.mainloop() if __name__ == '__main__': main()

試したこと

謎のパディングがあるのかなと思っているのですが、結局よくわかんないです。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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

Tkinter

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