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

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

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

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

Tkinter

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

Python

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

Q&A

解決済

2回答

618閲覧

pythonのtkinterで四角形をダイアモンド型に配置する方法

yunaojus

総合スコア14

Python 3.x

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

Tkinter

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

Python

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

0グッド

0クリップ

投稿2022/06/25 02:30

pythonのtkinterを使って四角形をダイアモンド状に配列する

pythonのtkinterのcreate_rectangleを用いて、上記のような四角形をダイアモンド状に配列して描画するプログラムを書きたいです。
以下のように四角形を四角形状に配列するところまではできたのですが、これをダイアモンド状に配置することが難しいです。アドバイス等どうぞよろしくお願い致します。

イメージ説明

python

1from tkinter import * 2 3# ウィンドウの作成 4win = Tk( ) 5win.title( "Sample Window" ) 6width, height = 600, 600 7win.geometry( f"{width}x{height}" ) 8win.attributes( "-topmost", True ) 9 10# キャンバスの作成 11c = Canvas( win, width=width, height=height ) 12 13# 描画 14#size = int( input("サイズ:")) 15size = 9 16edge = 35 17for n in range( size ): 18 for m in range( size ): 19 r = c.create_rectangle( (m+1)*edge-2 , (n+1)*edge-2, m*edge, n*edge) 20 c.move( r, 150, 150 ) 21 22# 描画の確定 23c.pack( ) 24 25# ウィンドウの制御を渡す 26mainloop( ) 27

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

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

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

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

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

guest

回答2

0

ベストアンサー

Numpy を利用する方法。

python

1from tkinter import * 2import numpy as np 3 4# ウィンドウの作成 5win = Tk( ) 6win.title( "Sample Window" ) 7width, height = 600, 600 8win.geometry( f"{width}x{height}" ) 9win.attributes( "-topmost", True ) 10 11# キャンバスの作成 12c = Canvas( win, width=width, height=height ) 13 14# 描画 15#size = int( input("サイズ:")) 16size = 9 17edge = 35 18 19# 描画位置 20s = size//2 21idx = np.add.outer(*[np.r_[:s, s:-1:-1]]*2) >= s 22 23for n in range( size ): 24 for m in range( size ): 25 if idx[n, m]: 26 r = c.create_rectangle( (m+1)*edge-2 , (n+1)*edge-2, m*edge, n*edge) 27 c.move( r, 150, 150 ) 28 29# 描画の確定 30c.pack( ) 31 32# ウィンドウの制御を渡す 33mainloop( )

イメージ説明

投稿2022/06/25 05:22

編集2022/06/25 05:43
melian

総合スコア19714

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

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

0

size=9の場合、以下のような規則で描画すればよいです。
ここでsize//2行目を中心として規則が鏡に映したようになっていることに注目してください。

PlainText

1n=0行目はm=4列からm=4列までなら描画する 2n=1行目はm=3列からm=5列までなら描画する 3n=2行目はm=2列からm=6列までなら描画する 4n=3行目はm=1列からm=7列までなら描画する 5n=4行目はm=0列からm=8列までなら描画する 6n=5行目はm=1列からm=7列までなら描画する 7n=6行目はm=2列からm=6列までなら描画する 8n=7行目はm=3列からm=5列までなら描画する 9n=8行目はm=4列からm=4列までなら描画する

投稿2022/06/25 04:56

can110

総合スコア38262

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問