2017-12-06 6 views
-1

コロンビア特別区の画像を表示したいのですが、tKinterでポリゴンを作成するのに240座標です。座標はスペースで区切られており、それらを「分割」してxとyに追加したいと考えています。私がこれまでに添付してきたプログラムは何も動かず、単に「操作が完了しました」と言います。予想される結果は、640×480のウィンドウ内にDCが表示されていることです。tkinterでファイルから読み取った座標でポリゴンを作成する方法

from Tkinter import Tk,Canvas 
from PIL import Image,ImageTk 
root = Tk() 
canvas = Canvas(root, width=640, height=480, bg="white") 
f = open("lab312.txt") 
points = [] 
for n in range (1, 240): 
    z = f.readline() 
    coords= z.split(" ") 
    x=float(coords[0]) 
    y=float(coords[1]) 
    points.append((12820*x+300,324*y+2198)) 
root.mainloop() 

私が受け取った結果は480×640ではなかった窓であり、それはそれで何も持っていませんでした。

+1

ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。具体的には、入力例と結果のトレース(例: 'print(points)')を入力して問題を説明します。 – Prune

+1

まず、キャンバスに何も追加しないで、キャンバスをレイアウトしないで、あなたの座標が画面から大きく離れてしまいます。これらの問題を解決して、依然として[mcve]を提供するための助けが必要な場合。 – Novel

+1

編集しても、私はあなたがキャンバスに書き込むことはありません。おそらく、 'canvas.create_polygon()'の呼び出しが正しい方向に動かすかもしれません。 –

答えて

0

入力 'ファイル'として文字列のリストを使用する最小限の作業例です。主な問題は、データファイルで使用されている座標からx、yがそれぞれの範囲にあるキャンバスプロット座標に変換され、yが小さくなります。

import tkinter as tk 
root = tk.Tk() 
canvas = tk.Canvas(root, width=640, height=480, bg="white") 
canvas.pack() 
f = [ 
'50 50', 
'100 10', 
'200 200', 
'100 300', 
'75 200', 
] 
points = [] 
for line in f: 
    x, y = map(int, line.split()) 
    points.extend((x, y)) 
canvas.create_polygon(*points, fill='red') 
root.update() 
+0

文字列を浮動小数点に変換してデータ値に一致させるのに問題があります。また、読み込んだ座標を変更したり追加してウィンドウに収まるようにするにはどうしたらいいですか? –

+0

最初にhttp://infohost.nmt.edu/tcc/help/pubs/tkinter/web/canvas-window-coords.htmlを読んで、スクロールすることなく人生がより簡単になることに気づくでしょう。あなたは、ワールド座標(ファイル入力)をキャンバス/ウィンドウ座標に変換する方法があります。これは、通常、コンピュータグラフィックス文献のビューポート座標と呼ばれます。正確な答えは、2つのシステムの座標限界に依存します。方程式はhttps://www.cs.mtsu.edu/~jhankins/files/4250/notes/WinToView/WinToViewMap.htmlにあります。選択したDC領域の四隅がキャンバスの四隅にマップされていれば、それは正しいものです。 –

関連する問題