2017-09-06 10 views
2

私は比較的新しいtkinterです。私は、正方形だけを使ったゲームを作っています。私がオフにコピーしている本は、三角形だけを示しています。ここでは、コードは次のとおりです。ポリゴンのポリゴン3.5 tkinter

# The tkinter launcher (Already complete) 
from tkinter import * 
HEIGHT = 500 
WIDTH = 800 
window = Tk() 
window.title ('VOID') 
c = Canvas (window, width=WIDTH, height=HEIGHT, bg='black') 
c.pack() 
# Block maker (Issue) 
ship_id = c.create_polygon (5, 5, 5, 25, 30, 15, fill='red') 

私はすべてのエラーを取得しない私は、正方形を作るしようとしているとして、それは、私が取得しない数字だけの文字列、(5, 5, 5, 25, 30, 15)です。 Canvas.create_polygon definition

+0

と船のサイズを指定するには、さらに一歩これを取ることができるのではなく3 –

+0

することができます単にこれを行う方法をGoogle。それはいくつかのサイトに掲載されており、スタックオーバーフローについてはすでに多くの回答があります。キャンバスウィジェットの[tkinter docs](http://effbot.org/tkinterbook/canvas.htm)を見てください。 –

+0

OP、提案された回答のいずれかがあなたの質問に答えましたか? – RagingRoosevelt

答えて

2

要約:

表示されているように、多角形の2つの部分があります。その概要とその内部を。その形状は、一連の頂点[(X0、Y0)、(X1、Y1)、...(XN、YN)]

id = C.create_polygon(x0, y0, x1, y1, ..., option, ...)

はあなたが合格する必要があります(...)として指定されていますこの指定された順序での正方形の座標例えば :

myCanvas.create_polygon(5,5, 5,10, 10,10, 10,5) 

が頂点(5, 5)(5, 10)(10, 10)(10, 5)である正方形を作成するように

myCanvas.create_polygon(5, 5, 5, 10, 10, 10, 10, 5) 

を読み出すことができます。

1

Here's に関する情報(official docs)。 (5,5), (5,25), (30, 15)と赤とポリゴンを埋める:

nmt.eduページによれば、関数呼び出しの形式は

id = C.create_polygon(x0, y0, x1, y1, ..., option, ...) 

あるこれはship_id = c.create_polygon (5, 5, 5, 25, 30, 15, fill='red')コールは次の頂点を持つ多角形を作成することを意味します。

あなたは、正方形を作成する場合は、次の操作を行う必要があるだろう:頂点を持つ長方形(5,5)を作成

ship_id = c.create_polygon (5, 5, 5, 25, 25, 25, 25, 5, fill='red') 

、(5,25)、(25,25 )、(25,5)。

あなたが船を作るために、より再現性のある方法を望んでいた場合、あなたは

def ship (x,y): 
    return [x-5, y-5, x+5, y-5, x+5, y+5, x-5, y+5] 
ship_id = c.create_polygon(*ship(100, 500), fill='red') 

ような何かを行うことができます上記のあなたは、xとyを指定した船のファクトリ(ラムダ関数)のようなものを作成します船の中心については、そしてcreate_polygon機能のために使用することができる頂点のリストを与える。あなたは長方形が、あなたはそれが4 X/Y座標与えなければならないようにしたい場合は

あなたも、微調整ラムダ関数

def ship (x,y,w,h): 
    return [x-w/2, y-h/2, x+w/2, y-h/2, x+w/2, y+h/2, x-w/2, y+h/2] 
ship_id = c.create_polygon(*ship(100, 500, 8, 8), fill='red') 
+1

ちょうど発言として: 'lambda'式を割り当てるのはお勧めできません、' def'を使う方が良いです。参照:[PEP8](https://www.python.org/dev/peps/pep-0008/)、アンカーはありませんが、ctrl + f - > lambdaです。 –

+0

@Rightleg ああ、それを実現していませんでした。デバッグ、読みやすさ、およびラムダがもたらす唯一の利点を意識しています。私を真っ直ぐにしてくれてありがとう – RagingRoosevelt