Введение в Python (Красота) - страница 29

>| f.write('\n'.join(sorted(self.links)))

>| # закрываем файл

> f.close()


Все готово, можем запускать парсер.


>| parser = MyHTMLParser("http://python.org")


После того как вы запустите данный скрипт в директории, где находится ваш файл появится текстовый документ links.txt, содержащий ссылки.


Конечно, данный пример достаточно примитивен, но на его основе вы можете попробовать написать, к примеру, веб-crawler, который будет анализировать весь сайт целиком, а не одну его страницу.


Примитивный Paint на Python

В данной статье мы напишем простенькую рисовалку на Python. На этом примере мы потренируемся в создании GUI, использовании макетов компоновки в tkinter, передаче дополнительных аргументов в функцию-обработчик нажатия кнопки и использовании lambda-функции в Python.

Для этого примера удобнее будет использовать классовый подход к созданию GUI. Для начала определим класс Paint:


>| from tkinter import *

>| class Paint(Frame):

>| def __init__(self, parent):

>| Frame.__init__(self, parent)

>| self.parent = parent

>| def main():

>| root = Tk()

>| root.geometry("1920x1080+300+300")

>| app = Paint(root)

>| root.mainloop()

>| if __name__ == "__main__":

>| main()


Запустив этот код вы должны получить простенькое окно, с которым мы будем работать дальше.

Теперь напишем для класса Paint метод setUI, в котором будет задаваться расположение всех кнопок, меток и самого поля для рисования. У нас будет два ряда кнопок, первый ряд с кнопками устанавливающими цвет, второй ряд устанавливает размер кисти для рисования. Под ними будет идти поле для рисования.

Это достаточно объемный метод, однако многие строки повторяются, так что наберитесь терпения:


>| def setUI(self):

>| self.parent.title("Pythonicway PyPaint") # Устанавливаем название окна

>| self.pack(fill=BOTH, expand=1) # Размещаем активные элементы на родительском окне

>|

>| self.columnconfigure(6, weight=1)

# Даем седьмому столбцу возможность растягиваться, благодаря чему кнопки не будут разъезжаться при ресайзе

>| self.rowconfigure(2, weight=1) # То же самое для третьего ряда

>

>| self.canv = Canvas(self, bg="white") # Создаем поле для рисования, устанавливаем белый фон

>| self.canv.grid(row=2, column=0, columnspan=7,

>| padx=5, pady=5, sticky=E+W+S+N)

# Прикрепляем канвас методом grid. Он будет находится в 3м ряду, первой колонке, и будет занимать 7 колонок, задаем отступы по X и Y в 5 пикселей, и заставляем растягиваться при растягивании всего окна