Найти - Пользователи
Полная версия: Первое общение с Tkinter
Начало » Python для новичков » Первое общение с Tkinter
1
Nivs
Здравствуйте. Вот вот начал изучать 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 тоже сам выбрал, может не правильный выбор сделал?
Piton23
Да почему не правильный, просто побольше времени надо уделить наверное чтоб получалось, т.е. не все сразу придет. Я по сути рассматривал wx, кодом не поделюсь, но. Как то у вас mainloop в бесконечном цикле, чет не очень хорошо. Там последующие итерации проходят вроде когда вы основное окно закрываете. А смену цветов надо делать в обработчиках событий основного потока.

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


Люди занимающиеся на Tkinter мб подскажут тебе более конкретней.
Nivs
Да мне бы просьбу эту выполнить и всё, сам-то я еще до классов даже не дошел, пока делаю простейший конфигуратор файлов репозитариев (просто изменяю некоторые цифры в некоторых строках некоторых файлов), вот там проблем нет. Хотел сделать массовый вывод цветного текста и фона в консоли, но как-то это не кошерно ни разу
sp3
__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()
Nivs
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'ом, под вендой всё ок.

Последняя неувязочка: т.к. я не понимаю пока порядка выполнения программы, то не могу пофиксить очерёдность - тут сначала воспроизводится звук, а потом меняется цвет. Как сделать так, чтобы сначала менялся цвет, а потом воспроизводился звук?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB