Python 3.3 GUI с картинкой

от
Прочие языки   python

Итак создадим оконное приложение,с использованием изображений в качестве фона.

Что нам понадобится:

     Python 3.3 - Интерпретатор питон. Скачать тут

     Картинка по размеру окна(можно больше).

     Большая кружка кофе.

Устанавливаем интерпретатор питона,добавляем к переменной PATH,путь к интерпретатору. У меня "I:\Python33\".

Жмем Пуск и видим(видим?) IDLE (python GUI). Смело жмем на нее. Появляется окошко со стандартным парселтанговским приглашением к вводу ">>>".

Ура! Именно этой штукой мы и будем запускать нашу кулцкодерскую программу. Работать в режиме командной строки нам будет неудобно,

поэтому жмем в левом верхнем углу на меню 'File' > 'New file'(Ctrl+N). В результате чего,появилось пустое окно с гордым названием Untitled.

Собсно это и есть текстовой редактор в котором мы будем работать ( тут даже подсветка синтаксиса есть!(= ).

Для начала укажем кодировку
  1. #-*-coding:utf-8-*-
. Хотя третья ветка питона по умолчанию ориентирована на юникод.

Теперь нам необходимо импортировать нужные модули в наш скрипт(иначе откуда мы их возьмем?). Для этого в питоне предусмотрена инструкция
  1. import
.

Для начала подключим основные модули-os,time,tkinter:

    
  1. import os
  2.  
  3. import time
  4.  
  5. import tkinter
  6.  
  7. from tkinter import *

Рассмотрим этот кусочек немного подробнее. Подключая модули,мы делаем их код(содержимое),доступным для нашего скрипта,и теперь питоша знает,

что за неведомую функцию мы велим выполнить. Импортируйте модули по порядку стандартные-системные,прикладные,подмодули.

Импортируйте модули,каждый в своей строке,между импортами одна пустая строка ("-Чувак! А давай сделаем проще! import os,time,tkinter. -Не могу! Мне PEP8 не разрешает =(").

Модуль os,содержит инструменты для работы с системой. Модуль time,работает со временем(пожалуйста!).Tkinter-Графическая библиотека.

Инструкция
  1. from
импортирует подмодули для указанного модуля(в нашем случаи все).

И мы начинаем КВН собсно писать программу.


Создадим константу WORK_PATH,в которой будем хранить полный путь к файлу(понадобится нам в будущем,и вообще привыкайте к ней).

  1. WORK_PATH=os.path.abspath(os.getcwd())
. Рассмотрим подробнее.

path()-подмодуль для работы с путями.

abspath()-функция возвращающая абсолютный путь к аргументу(например дескриптору файла).

getcwd()-возвращает путь относительно запущенного скрипта.

Таким образом наша константа может содержать такой путь "C:\Projects\main.py".

Создадим главное окно нашей программы,и присущие ему атрибуты:

    
  1. root=Tk()#это и есть то самое главное окошко!
  2.  
  3. root.overrideredirect(1)#а теперь мы виджет))аргументы True/False
  4.  
  5. root.geometry("100x100+0+0")#задаем размер 100 на 100 пикселей и координаты размещения на экране.
  6.  
  7. bg_image=PhotoImage(os.path.join(WORK_PATH,'bg.gif'))#вот нам и пригодился WORK_PATH! os.path.join()-соединяет пути. PhotoImage-загружаем изображение.
  8.  
  9. bg=Label(root,image=bg_image)#создаем метку(текст как бэ) но вместо текста ставим изображение(хе-хе,хитрюги =)).
  10.  
  11. bg.pack()#заливаем фон.(вообще,это позиционирование,но в данном случае мы именно заливаем фон.

Ну вот теперь у нас есть окошко! Но что мы с ним будем делать? Хмм.. Сделаем часы! =)

    
  1. def clock(event):
  2.  
  3.     time_from_out=time.strftime("%H:%M:%S")
  4.  
  5.     clock_value=Label(root,bg='black',fg='green',text=time_from_out,font=('Comic Sans MS',8))#создаем текстовую метку,она будет показывать время. bg-фон метки,fg-цвет текста,font-параметры шрифта.
  6.  
  7.     while event:
  8.  
  9.         clock_value.place(x='20',y='20')#размещаем наше время
  10.  
  11.         root.update()#обновляем окошко
     
Вся наша программа может выглядеть так:

  1. import os
  2.  
  3. import time
  4.  
  5. import tkinter
  6.  
  7. from tkinter import *
  8.  
  9. WORK_PATH=os.path.abspath(os.getcwd())
  10.  
  11. root=Tk()
  12.  
  13. root.overrideredirect(1)
  14.  
  15. root.geometry("100x100+0+0")
  16.  
  17. bg_image=PhotoImage(file=os.path.join(WORK_PATH,'bg.gif'))
  18.  
  19. bg=Label(root,image=bg_image)
  20.  
  21. bg.pack()
  22.  
  23. def clock(event):
  24.  
  25.     while event:
  26.  
  27.         time_from_out=time.strftime("%H:%M:%S")
  28.  
  29.         clock_value=Label(root,bg='black',fg='green',text=time_from_out,font=('Comic Sans MS',8))
  30.  
  31.         clock_value.place(x='22',y='35')
  32.  
  33.         root.update()
  34.  
  35. clock(Event)
  36.  
  37. root.mainloop()

Вот,что получилось у меня clock.rar

Спасибо за прочтение =))
+2   2   0
7309