суббота, 30 января 2010 г.

Tkinter Canvas: Рисование простейших фигур в Python'е


В данной статье мне хотелось бы рассмотреть простейшие способы работы с Tkinter и его виджетом Canvas(холст), а именно рисование простейших геометрических фигур с помощью стандартных методов Canvas. Для начала нам необходимо создать окно, в котором мы разместим наш холст 300 на 300 пикселей, куда и будем помещать наши фигуры:



from Tkinter import * #Подключаем модуль Tkinter в наше приложение
root = Tk() #Производим инициализацию нашего графического интерфейса
canvas = Canvas(root, width=300, height=300) #Инициализируем Canvas размером 300х300 пикселей
canvas.pack() #Размещаем Canvas в окне нашего Tkinter-GUI
root.mainloop() # Создаем постоянный цикл


В результате выполнения данной последовательности строк вы будете иметь квадратное серое окошко. Все холст готов и можно приступать к рисованию фигур. Сначала нарисуем круг для этого между 4 и 5 строкой поместим строку следующего вида:


circle = canvas.create_oval(10,10,290,290, fill="blue")


После запуска нашего скрипта у нас должно появится окно с изображением синего круга.


Данная строка описывает правило создание объекта oval который принадлежит виджету canvas. Переменной circle присваиваем canvas.create_oval(x0, y0, x1, y1, options, …). Где x0, y0, x1, y1 — координаты овала:



А option это различные параметры которые имеет овал в нашем примере мы использовали параметр fill(заполнение цветом) и присвоили ему значение "blue" — синий.
Вообще цвета в Tkinter можно задавать двумя способами: первый это тот который мы использовали назвав цвет по имени например "blue" и второй, который задается с помощью шестнадцатиричных чисел:





#rgbЧетыре бита на цвет
#rrggbbВосемь бит на цвет
#rrrgggbbbДвенадцать бит на цвет


Пример: fill="#00f" – получаем тот же синий цвет.
Теперь, давайте в нашем скрипте добавим еще одну строку и поместим ее между строкой начинающейся со слова circle и строкой root.mainloop()

diamond = canvas.create_polygon(150,10,10,150,150,290,290,150, fill="red")

С помощью данной строки мы нарисовали многоугольник в виде ромба и заполнили его красным цветом. Для того чтобы нарисовать многоугольник требуется просто задать координаты его вершин canvas.create_polygon(x0, y0, x1, y1, x2, y2, x3, y3, fill="red"), все вершины последовательно соединяются линией и получается фигура. С помощью данного объекта можно рисовать многоугольники любой формы.



Далее поместим в ромб квадрат, сразу после строки diamond пишем следующую строку:

square = canvas.create_rectangle(80,80,220,220, fill="green")

Координаты прямоугольника задаются также как и координаты овала, а именно используются координаты верхней левой и правой нижней части прямоугольника



И последнее добавим текст с помощью метода create_text. Координаты данного метода задаются от центра текста, дополнительные параметры также включают цвет, шрифт, но главным параметром является тот который и выводит текст на холст canvas. Следующий пример выводит надпись в центре углу холста.

text = canvas.create_text(150,150, text="Tkinter canvas", fill="purple", font=("Helvectica", "16"))

К видно из написанной строки метод create_text тоже имеет координаты в данном случае это центр текста, опция text выводит само сообщение, опция fill как описано выше цвет заполнения в данном случае цвет шрифта и опция font определяет настройки шрифта (в нашем примере тип и размер).


Вот как выглядит полный рисунок который мы составили с помощью python:



А вот какой у Вас должен появиться скрипт:


from Tkinter import *
root = Tk()
canvas = Canvas(root, width=300, height=300)
canvas.pack(fill=BOTH)
circle = canvas.create_oval(10,10,290,290, fill="#00f")
diamond = canvas.create_polygon(150,10,10,150,150,290,290,150, fill="red")
square = canvas.create_rectangle(80,80,220,220, fill="green")
text = canvas.create_text(150,150, text="Tkinter canvas", fill="purple", font=("Helvectica", "16"))
root.mainloop()

Удаление элементов с холста

Вы наверно обратили внимание, что мы присваивали значение переменным в виде созданных объектов на холсте. Каждая созданная фигура на холсте имеет свой идентификатор, это необходимо для того, чтобы в дальнейшем мы могли управлять ими.
Вы можете удалить любую фигуру с холста используя canvas.delete, например:


canvas.delete(square)
canvas.delete(text)


Таким образом добавляя и удаляя элементы c холста, Вы можете создать более сложную и точную обратную связь пользователя с вашим приложением. Canvas имеет много настроек и дает возможность манипуляции с объектами на более сложном уровне. Например так:


# coding: utf-8
from Tkinter import *

import time
def deltext():
canvas.delete(text)
def delsq():
canvas.delete(square)

root = Tk()
btn1 = Button(root, text="Удалить надпись", command=deltext)
btn1.pack()
btn2 = Button(root, text="Удалить квадрат", command=delsq)
btn2.pack()
canvas = Canvas(root, width=300, height=300)
canvas.pack(fill=BOTH)
circle = canvas.create_oval(0,0,300,300, fill="blue")
diamond = canvas.create_polygon(150,0,0,150,150,300,300,150, fill="red")
square = canvas.create_rectangle(75,75,225,225, fill="green")

text = canvas.create_text(150,150, text="Tkinter canvas", fill="purple",
font=("Helvectica", "16"))
root.mainloop()


Реклама от LiveCLiX
Читать далее

четверг, 14 января 2010 г.

FAQ pdfsam

В данной заметке я хотел привести вольный перевод FAQ'а предоставленного на сайте www.pdfsam.org, почему автор использует две версии одной программы и поможет настроить работу данного программного обеспечения на вашем комппьютере. Итак начнем:



Что такое pdfsam

pdfsam(PDF Split and Merge) – очень простая, удобная, бесплатная, открытая исходная утилита, необходимая для разбивки и объединения pdf-файлов Данный софт выпущен в двух версиях: базовый и расширенный. Включает консоль и графический интерфейс.


Почему две версии?

Базовая версия(Basic version) очень простой и стабильный продукт. Она является полностью бесплатной и справляется с большинством ваших задач при работе с pdf.
Улучшенная версия(Enhanced version) также является open source продуктом, но имеет больше возможностей чем базовая версия. Она является "почти" бесплатной, Вы можете загрузить исходный код, скомпилировать его и использовать. Но если Вы думаете, что она чего-то стоит, то Вы можете сделать нам пожертвование.


Я должен платить за расширенную версию?

Да и нет. Расширенная версия не имеет фиксированной цены. Исходный код доступен для загрузки, поэтому Вы можете скомпилировать и использовать его. Вы также можете сделать пожертвование в любом размере(1$, 10$, 100$... столько, сколько Вы хотите), после этого Вы получите полный доступ к компилированному коду, инсталлятору win32 плюс доступ на форумам поддержки и в раздел запросов для расширения функциональности.


Почему я должен пожертвовать?

Внеся пожертвование Вы оказываете поддержку проекту с открытым исходным кодом. Данный проект не поддерживается никакой крупной компанией, и написан только автором и за счет его свободного времени. Автор работает над проектом более трех лет и верит что pdfsam является нужной и ценной программой. Если Вы думаете, что усилия автора не стоят и евро, то можете просто загрузить исходный код и скомпилировать его. Если Вы верите в open source, в общедоступную культуру и вы думаете, что pdfsam является полезным продуктом, пожертвуйте и Вы будете пользоваться версией enchanced и всеми связанными с этим продуктом льготами. Пожертвованные деньги будут использованы, для продвижения pdfsam и улучшения его функций о которых просят пользователи. Вы не платите за программное обеспечение, но Вы поддерживаете open source и свободную культуру.


Как получить версию enchanced

Чтобы скачать расширенную версию нужно иметь аккуант на форуме (Регистрация здесь) и подарить по крайней мере 1 € здесь. Затем Вы можете скачать расширенную версию здесь.


Я хочу пожертвовать через SourceForge

Идеально, только не забудьте добавить на форум имя пользователя в комментариях о пожертвовании, иначе мы не сможем узнать кем Вы являетесь на форуме pdfsam.


Язык?

Pdfsam написан на Java Swing и оттестирован на Java(TM) 2 SDK, Standard Edition, Версии 1.4.2.


Ну... я имел ввиду челевеческий язык!

О, извините, таки да pdfsam сейчас поддерживает много языков. Спецификации языка определяются в файле config.xm в теге “i18n” и могут быть установлены в разделе параметров настройки pdfsam. Библиотека языков обновляется при каждом релизе с последними доступными переводами, проверить можно здесь, если Вы хотите перевести pdfsam.


Еще некоторые детали?

pdfsam — имеет простой графический интерфейс на библиотеке iText . И сделан из 5 основных компонентов.


  1. Главный GUI написан на Java swing.

  2. Плагин склеивания написан на Java Swing.

  3. Плагин разбивки написан на Java Swing.

  4. Плагин альтернативное смешивание написан на Java Swing.

  5. Консоль написана в Java.


В основной графический интерфейс загружаются каждое дополнения с каталога "plugins" и отображаются как узлы в дереве выбора. Плагин отправляет список параметров на консоль, которая выполняет надлежащую команду.


Как запустить основной графический интерфейс?

Двойной клик на файле pdfsam-CURRENT_VERSION.jar или наберите java -jar /PATH_TO_PDFSAM/pdfsam-CURRENT_VERSION.jar


Возникли проблемы?

Проверьте, установлена ли у Вас рабочая Java Virtual Machine 1.4.2 или выше для первой ветки и 1.6 или выше для второй.
Изучите предоставленный (pdfsam-1.1.0-tutorial.pdf) учебник в папке doc.


Получил сообщение OutOfMemory?

По умолчанию размер памяти для JVM составляет 64Мб и Вы вероятно обрабатываете pdf-документ большого объема. Попробуйте запустить pdfsam с большим объемом памяти набрав "Java-Xmx128m-jar / PATH_TO_PDFSAM / pdfsam-CURRENT_VERSION.jar" запуск pdfsam c 128Мб (Вы можете изменить значение-Xmx до 2048 для 32-разрядного JVM).


Что такое консоль?

pdfsam-консоль представляет собой приложение командной строки. Он использует jcmdline для разбора входных параметров и далее она выполняет надлежащую команду.


Как запустить консоль?

В "подкаталоге Bin" есть файл с расширением Bat для Win32 и sh скрипт для * nix систем.


Почему консоль?

Командная строка консоли может быть использована для пакетной обработки файлов или для обработки файлов сервером.


Как насчет плагинов?

Плагин Jpanel загружается и отображается в базовом графическом интерфейсе. Если Вы хотите написать собственный плагин к программе, он ДОЛЖЕН включать класс AbstractPlugablePanel.
Когда Вы пишете свой плагин к программе необходимо продумать чтобы у него был доступ к консоли, библиотекам iText и jcmdline.


Отладка?

Если у Вас появились проблемы при загрузке плагинов попробуйте следующее:


  • Откройте файл config.xml c помощью хорошего редактора (Notepad++...)

  • Заполните тег “plugs_absolute_dir” указав абсолютный путь к директории вашего плагина

  • Сохраните


pdfsam сам пытается найти каталог плагинов к программе, но, если есть некоторая проблема, Вы можете определить абсолютный путь как описано выше.


Не могу найти javaw.exe

Если при двойном щелчке мышью pdfsam.exe выдает сообщение “Cannot find javaw.exe”, это означает что он не может найти рабочие java установки. Решить проблему можно установив (или переустановив) рабочий Java Runtime Environment (версию 1.4.2 или выше для ветки 1 и версию 1.6 или выше для ветки 2).



Читать далее

суббота, 2 января 2010 г.

pdfsam - программа обработки pdf-документов

Для своей работы долго искал программное обеспечение которое могло делать элементарные вещи с pdf-документом, такие как удаление страницы из документа, добавление страницы из других pdf'ок, поворот страниц внутри документа т.е. выполнять элементарные действия по обработке pdf-документов. И вот нашел кроссплатформенную программку с лицензией GPL2 под названием pdfsam (сокращение от PDF Split and Merge), Интерфейс программки конечно необычен, но она свое дело делает нормально, также имеется частичный перевод на русский язык. Данное ПО написано на java (Для ее установки необходимо иметь Java SE Runtime Environment 1.4.2 или выше для ветки 1 и версию 1.6 или выше для ветки 2). Также есть возможность выбирать выбирать версию получаемого pdf-файла: acrobat6(вер. 1.5), acrobat7(вер. 1.6),acrobat8(вер. 1.7).



Pdfsam имеет два интерфейса:

  • Графический для работы в визуальном режиме

  • Консольный для работы в режиме командной строки, может использоваться для пакетной обработки файлов.


Pdfsam имеет две версии Basic (бесплатная) и Enhanced(условно-бесплатная). Возможности обеих версий описано ниже.


С помощью pdfsam basic вы сможете:

  • Осуществлять разбивку pdf-документа на: страницы, главы и т.д.

  • Объединять множество pdf-документов в один или отдельные части.

  • Извлекать части из документов и сохранять их отдельно.

  • Собирать разные страницы взятые из двух pdf-документов в один в новый pdf-документ.

  • Вращать страницы выбранных pdf-документов.

  • Визуально переупорядочивать в выбранном pdf-документе.

  • Визуально составлять документ, перетаскивая страницы из выбранных pdf-документов.

  • Сохранять и загружать ваш алгоритм для автоматизации вашей текущей работы.

  • Управлять настройками pdfsam при старте программы.


pdfsam enhanced:

  • шифрование Ваших PDF-файлов (RC40 бит, RC128 бит, AES128 бит) и набор разрешений на них.

  • Расшифровывать pdf-документ

  • Извлекать вложения из Ваших pdf-документов

  • Устанавливает опции для просмотра документа, чтобы сказать приложению как оно должно открыть документ.

  • вводить метаданные документа (автор, название, тему и ключевые слова).


Сайт данной программы находитьсяздесь
На момент написания статьи версия pdfsam 2.1
Работа данного софта проверялась на win2003, winxp

Читать далее