Уведомления

Группа в Telegram: @pythonsu

#1 Март 20, 2012 19:41:37

Nivs
От:
Зарегистрирован: 2012-03-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Первое общение с Tkinter

Здравствуйте. Вот вот начал изучать Python, но понадобилось в сжатые сроки сделать некий генератор для твистера. Т.к. сделать надо быстро, углубиться не получается. Вот что уже наделал:

__author__ = 'nivs'
# -*- coding: utf-8 -*-
from random import randint
from Tkinter import *
from time import sleep

def colorprint() :
color_rand = randint(1,4)
if color_rand == 1:
return 'green'
elif color_rand == 2:
return 'red'
elif color_rand == 3 :
return 'blue'
elif color_rand == 4 :
return 'yellow'

pause = False

def button_clicked(pause):
if pause :
pause = False
else :
pause = True
return pause

root=Tk()
root.geometry('300x400')
root.title('Hello, TK!')
button1 = Button(root, bg = "red", fg=" red ", width = 30, height = 30)

while 1:
color = colorprint()
button1.configure(bg = color, fg = color)
sleep(2)
print color
button1.pack(fill = BOTH)
root.mainloop()
Кнопка (попозже планирую на неё повесить паузу на смену цвета) появляется, цвет генерируется рандомно, но вот только 1 раз - больше меняться не хочет. Как сделать так, чтобы кнопка через каждые 4 секунды сама меняла цвет (и, кстати, при наведении на неё цвет меняется, это можно исправить?). Python самостоятельно изучаю, Tkinter тоже сам выбрал, может не правильный выбор сделал?



Отредактировано (Март 20, 2012 19:42:45)

Офлайн

#2 Март 21, 2012 04:40:22

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Первое общение с Tkinter

Да почему не правильный, просто побольше времени надо уделить наверное чтоб получалось, т.е. не все сразу придет. Я по сути рассматривал wx, кодом не поделюсь, но. Как то у вас mainloop в бесконечном цикле, чет не очень хорошо. Там последующие итерации проходят вроде когда вы основное окно закрываете. А смену цветов надо делать в обработчиках событий основного потока.

“Как сделать так, чтобы кнопка через каждые 4 секунды сама меняла цвет”
time.sleep() в основном потоке программы использовать не желательно (иначе появяться зависания), так что использовать многопоточность (модуль threading) либо взять какой-нить таймер


Люди занимающиеся на Tkinter мб подскажут тебе более конкретней.

Офлайн

#3 Март 21, 2012 07:22:10

Nivs
От:
Зарегистрирован: 2012-03-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Первое общение с Tkinter

Да мне бы просьбу эту выполнить и всё, сам-то я еще до классов даже не дошел, пока делаю простейший конфигуратор файлов репозитариев (просто изменяю некоторые цифры в некоторых строках некоторых файлов), вот там проблем нет. Хотел сделать массовый вывод цветного текста и фона в консоли, но как-то это не кошерно ни разу



Офлайн

#4 Март 21, 2012 09:36:52

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Первое общение с Tkinter

__author__ = 'nivs'
# -*- coding: utf-8 -*-
from random import choice
from Tkinter import *
from time import sleep

def colorprint() :
return choice(['red','green','blue','yellow'])


pause = False

def button_clicked(pause):
return not pause

root=Tk()
root.geometry('300x400')
root.title('Hello, TK!')
button1 = Button(root, bg = "red", fg="red", width = 30, height = 30)

def addbutton():

root.after(1000,addbutton)
color = colorprint()
button1.configure(bg = color, fg = color)

print color
button1.pack(fill = BOTH)

root.after(1000,addbutton)

root.mainloop()



Офлайн

#5 Март 21, 2012 17:55:18

Nivs
От:
Зарегистрирован: 2012-03-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Первое общение с Tkinter

sp3, спасибо, выручили!

Вот что в итоге получилось, наворочено, правда, но тем не менее:

__author__ = 'nivs'
# -*- coding: utf-8 -*-
from random import choice
from Tkinter import *
import winsound

def colorprint() :
return choice(['red','green','blue','yellow'])
def waveprint() :
return choice(['left_arm','left_leg','rigth_arm','rigth_leg'])
x = 1
my_pause = False
color = colorprint()
wave = waveprint()

def pause(e) :
global my_pause
my_pause = not my_pause

def show(e):
global sleep
print ent.get()
if not ent.get() :
sleep = 4
else :
sleep = int(ent.get())

root=Tk()
root.geometry('300x400')
root.title('Hello, TK!')
button1 = Button(root, bg = "red", fg="red", width = 30, height = 60)
sleep = 4

def addbutton():
global ent
global color
global wave
root.after(sleep*1000, addbutton)
if not my_pause :
color = colorprint()
button1.configure(bg = color, fg = color)
ent.pack(side='top')
button1.pack(side='bottom', fill=BOTH)
button1.bind("<Button-1>", pause)
if not my_pause :
winsound.PlaySound(wave + '.wav',winsound.SND_ALIAS)
winsound.PlaySound(color + '.wav',winsound.SND_ALIAS)
ent.bind('<KeyRelease>', show)

ent = Entry(root, width=3)
ent.insert(END,"4")
label = Label(root,text = "TwisterGenerator")
label.pack()
root.after(1000,addbutton)
root.mainloop()
И, как оказалось, цвет при наведении кнопка меняет только под Linux'ом, под вендой всё ок.

Последняя неувязочка: т.к. я не понимаю пока порядка выполнения программы, то не могу пофиксить очерёдность - тут сначала воспроизводится звук, а потом меняется цвет. Как сделать так, чтобы сначала менялся цвет, а потом воспроизводился звук?



Отредактировано (Март 21, 2012 18:58:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version