Cetus Group
Cetus Logo
Информационные системы и программное обеспечение



Файлы проекта

Поддержка

 
Разработка программного обеспечения средствами языка Python и библиотеки Tkinter
Редакция 12.09.2006 : Изменения 25.09.2006
А.Г. © Часть 2 - "Визуализация данных"

В примере рассмотрены возможности работы с графикой в Python/Tkinter.

Библиотека Tk, которая распространяется совместно с интерпретатором языка Tcl, имеет достаточно мощные средства визуализации данных. К таким средствам относится, например, создание именованных наборов (тегов) графических объектов с возможностями привязки событий и операций к этим наборам. Немаловажными достоинствами этой библиотеки являются переносимость, наличие интерфейса для нескольких языков программирования, невысокие требования к оборудованию... Представление о возможностях Tk дают примеры, которые распространяются совместно с Tcl/Tk. Для работы с Tk в Python реализован модуль Tkinter, преобразующий вызовы и типы Python в вызовы и типы Tcl.

Ниже представлен пример программы, позволяющий выполнить визуализацию данных. Визуализация состоит в построении графика по координатам точек, указанным в текстовом файле. Непосредственно визуализацию данных в примере выполняют методы класса Graph: __init__ и showPoint. Классы App и GrMenu придают примеру законченность готового приложения. Программа включает модуль классов:

from Tkinter import *
from FileDialog import *
import string

class App:
  def __init__(self,root,sizeX,sizeY,title):
    self.root = root
    self.sizeX,self.sizeY = sizeX,sizeY
    root.wm_title(title)
    root.wm_minsize(width=self.sizeX,height=self.sizeY)
    root.wm_maxsize(width=self.sizeX,height=self.sizeY)

  def Run(self):
    self.graph = Graph(self.root,self.sizeX,self.sizeY)
    menu = GrMenu(self.root,self.graph)
	
class GrMenu:
  def __init__(self,root,graph):
    menu = Menu(tearoff=0)
    menu.file = Menu(tearoff=0)
    menu.add_cascade(label='File',menu=menu.file)
    menu.file.add_command(label='Open...',command=graph.loadData)
    menu.file.add_separator()
    menu.file.add_command(label='Quit...',command=root.destroy)
    root.configure(menu=menu)

class Graph:
  def __init__(self,root,sizeX,sizeY):
    self.root = root
    self.canv = Canvas(root,relief="raised",width=sizeX,height=sizeY)
    self.canv.pack()
    self.sizeX,self.sizeY = sizeX,sizeY 
    self.fieldX = fieldX = step = sizeX/9
    self.fieldY = fieldY = sizeY/7
    self.r = step/10
    for i in range((sizeX-2*fieldX)/step):
      x = fieldX+i*step
      self.canv.create_line(x,sizeY-fieldY,x,fieldY,width=1)
      self.canv.create_text(x,sizeY-fieldY+5,text=i*step,anchor='n',font='Helvetica,10')
    for i in range((sizeY-2*fieldY)/step):
      y = sizeY-fieldY-i*step
      self.canv.create_line(fieldX,y,sizeX-fieldX,y,width=1)
      self.canv.create_text(fieldX-5,y,text=i*step,anchor='e',font='Helvetica,10')

  def loadData(self):
    fname = LoadFileDialog(self.root).go()
    if fname:
      f = open(fname,'r')
      self.point = []
      line=f.readline()
      while line:
        self.point.append((float(string.split(line)[0]),float(string.split(line)[1])))
        line=f.readline()
      f.close()
      self.showPoint()
      
  def showPoint(self):
    for point in self.point:
      x = point[0]+self.fieldX
      y = self.sizeY-self.fieldY-point[1]
      self.canv.create_oval(x-self.r,y-self.r,x+self.r,y+self.r,width=1,outline='black',fill='green',tag='point')
   
И главный модуль:
#!/usr/bin/python

from Tkinter import *

root = Tk()
app = App(root,450,350,"Coords editor")
app.Run()
root.mainloop()

После запуска приложения (файл mainpytk2.py) необходимо открыть файл с данными (в примере - "test.pnt"). Выполняем, проверяем результаты.


Copyright©2005, Cetus Group : All rights reserved.