|
Cetus Group
Информационные системы и программное обеспечение
Меню
Файлы проекта
Поддержка
E-mail:
cetus@ukr.net
|
Разработка программного обеспечения средствами языка 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"). Выполняем, проверяем результаты.
|