Comments 27
Студенты еще спросили, а можно ли запускать это как заставку на рабочем столе Windows? Пока не нашла как это можно было бы сделать.
Это же обычные программы, которые обычно запускаются на полный экран, ни и предусматривают выход при нажатии на клавиши и пр:
from Tkinter import *
root=Tk()
root.overrideredirect(1) # убираем заголовок окна
root.state('zoomed') # разворачиваем на весь экран
def exit(event):root.destroy()
Label(root,text='Hello world').place(relx=0.5,rely=0.5,anchor=CENTER)
root.bind('<Button-1>',exit) # сюда еще можно добавить события нажатия на клавиши
root.mainloop()
Остается собрать с помощью py2exe и поменять расширение с EXE на SCR
Изменить строчки выбора позиции круга.
x0 = randint(-size/10, size)
y0 = randint(-size/10, size)
Таким образом круги будут вылезать слева и сверху. И пустоты не будет оставаться.
x0 = randint(-size/10, size)
y0 = randint(-size/10, size)
Таким образом круги будут вылезать слева и сверху. И пустоты не будет оставаться.
art1415926535 отлично. Спасибо за идею. Я пробовала вместо 0 написать -3 — особо разницы не увидела, потому отказалась от этого. А до -size/10 не додумалась ;)
А еще лучше координаты круга указать так:
canvas.create_oval(...) овал рисует по координатам левого верхнего и правого нижнего угла описанного прямоугольника
http://www.python-course.eu/tkinter_canvas.php
P.S. и для d = randint(0, size/5) ноль лучше на какое-то число запустить (иначе получим круг нулевого диаметра)
canvas.create_oval(x-d/2, y-d/2, x+d/2, y+d/2, fill=colors)
canvas.create_oval(...) овал рисует по координатам левого верхнего и правого нижнего угла описанного прямоугольника
http://www.python-course.eu/tkinter_canvas.php
P.S. и для d = randint(0, size/5) ноль лучше на какое-то число запустить (иначе получим круг нулевого диаметра)
В работе со студентами и учениками я заметила, что при изучении какого-либо языка программирования большой интерес вызывает работа с графикой. Даже те студенты, которые скучали на заданиях про числа Фибоначчи, и уже казалось бы у них пропадал интерес к изучению языка, активизировались на темах, связанных с графикой.
У меня примерно так было.
Когда долгое время перед глазами графические интерфейсы, а сам не представляешь себе их внутреннего устройства, они кажутся магией. Открывая своё первое окно с помощью какого-нибудь API, будто посвящаешься в тайну, которая раньше тебе была недоступна. Отчего-то приложение с окном кажется более «реальным», чем прочие. Вероятно, это следствие повсеместного распространения Windows и невозможности представить себе какие-то иные приложения/программы. Консольные helloworld'ы кажутся непонятными и странными поделками.
Успехов в начинаниях! Попробуйте посмотреть PyGame и PyGame Zero — обычно, создание игрушек ещё больше увлекает.
www.pygame.org/docs/tut/newbieguide.html
pygame-zero.readthedocs.org/en/latest
На одной конференции писали ради забавы похожий код(код потерялся вместе с буком).
Из интересного цвета можно выбирать из палитры, а палитру взять уже готовую, тогда картинка будет смотреться целостнее, что ли (например flat ui).
Из интересного цвета можно выбирать из палитры, а палитру взять уже готовую, тогда картинка будет смотреться целостнее, что ли (например flat ui).
ice2heart тоже думала о том, что можно не только кружочки рисовать. На счет flat ui нашла такое flatuicolors.com. Оно?
Небольшое замечание к первому примеру. Вот сдесь пропущен импорт:
Нужно добавить:
from tkinter import *
window = Tk()
colorchooser.askcolor()
Нужно добавить:
from tkinter import colorchooser
Зачем? Мне кажется, что звездочки вполне достаточно, ведь нужен не только colorchooser, а и другие команды
Звездочка импортирует не все:
Почему так?
Код
импортирует классы, заданные в
Tk там есть, а colorchooser — нет. Отсюда и ошибка.
In [1]: from tkinter import *
In [2]: colorchooser.askcolor()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-f2db2b9f793a> in <module>()
----> 1 colorchooser.askcolor()
NameError: name 'colorchooser' is not defined
In [3]: from tkinter import colorchooser
In [4]: colorchooser.askcolor()
Out[4]: (None, None)
Почему так?
Код
from tkinter import *
импортирует классы, заданные в
/usr/lib/python3.4/tkinter/__init__.py
Tk там есть, а colorchooser — нет. Отсюда и ошибка.
Понятно, спасибо. Отвечу как двоечник — но работает же :) И у меня такой ошибки не возникает
Вот у меня возникла, поэтому и разобрался. Возможно, он был импортирован где-то ранее в коде, вот и работало. Я тестировал в интерактивной консоли Python 3.4 и 3.5.
Возможно, он был импортирован где-то ранее в коде, вот и работало
нет, не был
Я делала в IDLE Python 3.5.
В общем понятно, что нюанс такой может быть…
У меня, кстати, получались ошибки, если я писала просто — import tkinter
Если просто import tkinter, то в консоли появлялся объект-модуль «tkinter», и обращаться к его содержимому (к объявленным там классам, функциям и переменным) нужно с префиксом: window = tkinter.Tk(). Но colorchooser всё равно придётся импортировать отдельно: import tkinter.colorchooser и потом tkinter.colorchooser.askcolor() и так далее. А поскольку window вы таким образом объявляете уже в своём модуле, у него префикса не будет, его методы будут доступны непосредственно — например, window.state('zoomed') для разворачивания окна.
Если написать from tkinter import *, colorchooser не импортируется — посмотрите сами, dir() его не покажет.
Если написать from tkinter import *, colorchooser не импортируется — посмотрите сами, dir() его не покажет.
О, а ведь и верно, если использовать idle, после from tkinter import * мы видим, что colorchooser в dir() есть.
В любом случае, не рассчитывайте на это поведение. Это вероятнее всего баг idle, а не фича. В скриптах, запускаемых не через idle (c «шабангом» первой строкой вида #!/usr/bin/env python3, либо командой python script.py) это работать не будет.
И не стоит писать «from XXX import *» — это дурной тон. Можно нарваться на одинаковые идентификаторы в нескольких модулях. Лучше импортировать либо только то, что вы действительно будете использовать — в данном случае, примерно так: from tkinter import colorchooser, Tk
В любом случае, не рассчитывайте на это поведение. Это вероятнее всего баг idle, а не фича. В скриптах, запускаемых не через idle (c «шабангом» первой строкой вида #!/usr/bin/env python3, либо командой python script.py) это работать не будет.
И не стоит писать «from XXX import *» — это дурной тон. Можно нарваться на одинаковые идентификаторы в нескольких модулях. Лучше импортировать либо только то, что вы действительно будете использовать — в данном случае, примерно так: from tkinter import colorchooser, Tk
В любом случае, не рассчитывайте на это поведение. Это вероятнее всего баг idle, а не фича.
:))
А где лучше тогда проверять правильность кода?
Пишете в командной строке python или запускаете python.exe без параметров. Открывается интерактивная консоль, наподобие той, что в idle, но без всяких обрамлений. Вот поскольку непосредственно этот интерпретатор (python или python.exe) и будет выполнять вашу программу в подавляющем большинстве случаев, на её поведение можно ориентироваться.
А готовый скрипт запускать так: python(.exe) путь-к-скрипту.py
А готовый скрипт запускать так: python(.exe) путь-к-скрипту.py
Таки думала, что вы это скажете :)
Ясно. Но не очень удобно, зато надежно.
Ясно. Но не очень удобно, зато надежно.
На счет ошибки — вероятно, еще одна особенность IDLE (в дополнение к тому, что описал merlin-vrn в своих комментариях). В обычной консоли все отлично, модуль импортируется:
Осталось только обращаться к содержимому правильно :)
$ python3.5
Python 3.5.0 (default, Nov 1 2015, 16:18:53)
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>> tkinter
<module 'tkinter' from '/usr/lib64/python3.5/tkinter/__init__.py'>
>>>
Осталось только обращаться к содержимому правильно :)
а у меня canvas.create_oval кушает память и после рисования кружочка не отдаёт её обратно. И с каждым новым кружочком памяти всё меньше…
Есть ли в python способ рисования без создания объектов?
Есть ли в python способ рисования без создания объектов?
Sign up to leave a comment.
Пишем графическую программу на Python с tkinter