我是一名考古学家处理挖掘沟的结果,该挖沟以6x6方格网格布置 - 每个方格为5米x 5米。 我想绘制在网格上挖掘中发现的发现的分布。
我想在6x6 Python / Pygame网格中显示一些Excel数据库值
有人请告诉我我应该怎么做?
我想我知道如何让Python在*.csv
中读取Excel文档,但我无法在网格中显示它。
编辑数据
可以在链接中找到数据的片段。我想显示网格中“分类”列中的项目。
http://i48.tinypic.com/2rdgn02.jpg
例如,
每个方块中的“准备薄片”的数量,无论是数字还是颜色/形状,每个方块对应于S列中的gridsquare数字。数据库变得非常大。
所以,
理想情况下,我希望程序能够读取数据库并更新广场,而不必不断更改程序。
现在代码如下。
<import csv
import os
import pygame
# the functions for display
def disp(phrase,loc,screen): # function to display phrase at loc on surface.
s = font.render(phrase, True, (255,255,255))
screen.blit(s, loc) #
def text_display_csv(filename,surface):
'''Display .csv file contents on surface'''
f = csv.reader(open("Flint catalogue v1.7 4 Feb 13 2013.csv")) # open the csv file in one line!
for row in f:
y = f.line_num # assign y as Row no.
for x,item in enumerate(row): # Get column number(x) and item
disp(item, (64*x+10,64*y+10), surface) # display item
pygame.init()
pygame.font.init()
font = pygame.font.SysFont("Courier",36) # font initialisation
screen = pygame.display.set_mode((800,600))
# the part you want to see
text = [str(i) for i in range(36)] # raw data!
text_display_csv(text,screen) # text is displayed
pygame.display.update() # screen updated
# Main loop, does nothing! :)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
break
if not running:
break
如果可能的话。我希望结果以类似于图片波纹管的方式显示,其中每个数字代表广场中的“预制片”的数量。 http://i49.tinypic.com/f39hxv.png
我非常感谢任何帮助,请说如果这没有意义
汤姆
答案 0 :(得分:0)
由于您尚未告诉我们您使用的是哪种数据, 我已经采用了整数但任何字符串都可以工作。
以下是您可以显示的方式 包含字符串的网格(本例中为数字)Pygame中的:
import pygame
# the functions for display
def disp(phrase,loc,screen): # function to display phrase at loc on surface.
s = font.render(phrase, True, (255,255,255))
screen.blit(s, loc) #
def text_display(data,surface):
'''display your data(list/tuple),containing strings on surface'''
for x in range(6): # your data is in 6 X 6 grid
for y in range(6):
disp( data[x+(y*6)], (64*x+10,64*y+10), surface)
# 64 is the distance between 2 strings and 10 is the offset
pygame.init()
pygame.font.init()
font = pygame.font.SysFont("Courier",36) # font initialisation
screen = pygame.display.set_mode((400,400))
text = [str(i) for i in range(36)] # raw data!
text_display(text,screen) # text is displayed
pygame.display.update() # screen updated
# Main loop, does nothing! :)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
break
if not running:
break
<强>更新强>
汤姆,嗯
对于csv文件,您可以将此函数添加到脚本中,并使用它而不是text_display
def text_display_csv(filename,surface):
'''Display .csv file contents on surface'''
f = csv.reader(open(filename)) # open the csv file in one line!
for row in f:
y = f.line_num # assign y as Row no.
for x,item in enumerate(row): # Get column number(x) and item
disp(item, (64*x+10,64*y+10), surface) # display item
我没有测试过,所以请告诉我它是否有效。
更新2
在第一个代码块中,添加text_display_csv
和
更改
text = [str(i) for i in range(36)] # raw data!
text_display(text,screen) # text is displayed
pygame.display.update() # screen updated
到
filename = 'the .csv file'
text_display_csv(filename,screen) # text is displayed
pygame.display.update() # screen updated
这样代码就可以了。 (如果需要,改变间距和偏移量)