Chtěl využít kód z 20.lekce pro výuku písmenek, jak mám udělat :
- zaměnit text tlačítek (jsou tam čísla) za náhodně definovaná písmenka (třeba uložena v seznamu), písmenka by po každém spuštění kódu byla na jiném
místě - tlačítku, postě, aby to nebylo podle abecedy.
- po kliknutí na tlačítko s písmenkem, bych toto zobrazil jako obrázek (toto snad zvládnu), ale chtěl bych název písmenka přehrát třeba jako mp3. Co k
tomu budu potřebovat nastudovat?
Děkuji za nápovědu.
Fórum › Python
20.lekce
nejlehčí je přehrát wav. to nemusíš nic stahovat
import winsound
winsound.PlaySound("zvuk1.wav", winsound.SND_FILENAME|winsound.SND_ASYNC)
na ostatní formáty by šel použít modul pymedia. ale s tím nemám moc zkušeností, to si to vždy raději převedu do wav.
ten text tlačítek bych vybíral asi pomocí modulu random:text=random.choice(abeceda)
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
- zaměnit text tlačítek (jsou tam čísla) za náhodně definovaná písmenka (třeba uložena v seznamu), písmenka by po každém spuštění kódu byla na jiném
Jo, jak psal Blujacker, algoritmus by byl asi takový:
seznam=["A","B", .....]
opakuj pro každé tlačítko:
náhodně zvol písmeno ze seznamu
přiřad k tlačítku
odstraň ze seznamu, pokud se písmena nesmí opakovat
chtěl bych název písmenka přehrát třeba jako mp3. Co k
namluvit písmena do počítače jako mp3, nebo to někde sehnat. Pak stáhnout modul pymedia a
import pymedia, time
player= pymedia.Player()
player.start()
player.startPlayback('01.mp3')
while player.isPlaying():
time.sleep( 0.01 )
Prosím o pomoc.
Tento kód mi funguje tak, že vypíše do vytvořených tlačítek všechny písmenka abcecedy. Když použiji random.choice(), nemůžu přijít na to, jak odstranit již existující tlačítka , tzn. každé tlačítko pouze jednou a na náhodném místě. Jak - kam to napasasovat do kódu. Děkuji :ms_0385:
# -*- coding: utf-8 -*-
from Tkinter import *
import sys, random
hlavni = Tk()
hlavni.title("Abeceda")
velikost = 3
seznamTlacitek = []
abeceda=["A - a","B - b","C - c",u"Č - č","D - d","E - e","F - f","G - g","H - h","CH - ch","I - i","J - j","K - k","L - l","M - m","N - n","O - o","P - p",
"Q - q","R - r",u"Ř - ř","S - s",u"Š - š","T - t",u"T´ - t´","U - u","V - v","W - w","X - x","Y - y","Z - z",u"Ž - ž"]
pocetRadku = 4
pocetSloupcu = 8
p = 0
for poradi in range(pocetRadku*pocetSloupcu):
radek = poradi / pocetSloupcu
sloupec = poradi % pocetSloupcu
pismeno=abeceda[p] #pismeno = random.choice(abeceda)
tlacitko = Button(text=pismeno, font="Tahoma 14", width=velikost*2, height=velikost,
relief="groove",bg="lightgreen", fg="blue", overrelief="solid", activebackground="yellow") # akt.reliéf
# alternat. reliéf myš nad tlačítek, barva pozadí aktivního tlačítka,
tlacitko.grid(row=radek, column=sloupec)
seznamTlacitek.append(tlacitko)
p = p + 1
hlavni.mainloop()
sys.exit()
Ještě prosím o radu, jak mám přistupovat k vytvořeným tlačítkům ve výše uvedeném kódu, abych jim mohl přiřadit, co mají provádět, když je budu aktivovat. Asi k tomu bude potřeba načítat - uvádět obsah : print seznamTlacitek, kde je uložena pozice tlačítek. Díky.
nemusí, ale v případě že neí je třeba použít celu cestu.
když je typ obrázku gif tak ho vytvoříš:
obr=PhotoImage(file=cesta)
a když je to jiný typ tak bys musel použít PIL:
import Image,ImageTk
obr=ImageTk.PhotoImage(Image.open(cesta))
a pak jenom vložíš do štítku:
Label(image=image).pack()
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
To Blujacker:
-mám v kódu správce "grid". Jde to nějak zmáknout přes udalost.widget[]? Vložení obrázku vyřešeno !!!!
- nevím jak zapsat, když kliknu na určité tlačítko, třeba s textem "A-a", aby se mi přehrál zvuk přidělený k tomuto tlačítku. Tedy tlačítek x, nahrávek x,
každé tlačítko má přehrát vlastní zvuk. Co k tomu využít.
Tady je kód:(prosím o nápovědu i kritiku!)
Díky
# -*- coding: utf-8 -*-
# "Abeceda" + " od : SAVKA"
from Tkinter import *
import sys, random, winsound
import Image, ImageTk
def konec(udalost):
hlavni.quit()
def klik(udalost):
stitek=Label(text=udalost.widget["text"],font="Tahoma 14",fg="#0033ff",bg="white", width= 9, height= 2,)
stitek.grid(row=3, column=9)
print udalost.widget["text"]
udalost.widget["bg"] ="#0099ff"
udalost.widget["text"] = ""
def klikPravym(udalost):
stitek=Label(text=udalost.widget["text"],font="Tahoma 14",fg="#0033ff",bg="white", width= 9, height= 2,)
stitek.grid(row=3, column=9)
udalost.widget["text"] = ""
udalost.widget["bg"] = "#%02x%02x%02x" % (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) #náhodná barva od "D1ce"
winsound.PlaySound("zvuk", winsound.SND_FILENAME|winsound.SND_ASYNC)
#def klikKoleckem(udalost):
obr=PhotoImage(file="eye5.gif")
def zamychej(udalost):
abeceda=["A - a","B - b","C - c",u"Č - č","D - d","E - e","F - f","G - g","H - h","CH - ch","I - i","J - j","K - k","L - l","M - m","N - n","O - o","P - p",
"Q - q","R - r",u"Ř - ř","S - s",u"Š - š","T - t",u"T´ - t´","U - u","V - v","W - w","X - x","Y - y","Z - z",u"Ž - ž"]
pocetRadku = 4
pocetSloupcu = 8
for poradi in range(pocetRadku*pocetSloupcu):
radek = poradi / pocetSloupcu
sloupec = poradi % pocetSloupcu
pismeno = random.choice(abeceda) #pismeno=abeceda[p] - při seřazení dle abecedy
abeceda.remove(pismeno)
tlacitko = Button(text=pismeno, font="Tahoma 14", width=velikost*3, height=velikost,
relief="groove",bg="lightgreen", fg="blue", overrelief="solid", activebackground="yellow") #akt.reliéf
#alternat. reliéf myš nad tlačítek, barva pozadí aktivního tlačítka,
tlacitko.grid(row=radek, column=sloupec)
tlacitko.bind("<Button-1>", klik)
tlacitko.bind("<Button-3>", klikPravym)
#tlacitko.bind("<Button-2>", klikKoleckem)
seznamTlacitek.append(tlacitko)
#p = p + 1 : při seřazení dle abecedy
def serazenaAbeceda(udalost):
abeceda=["A - a","B - b","C - c",u"Č - č","D - d","E - e","F - f","G - g","H - h","CH - ch","I - i","J - j","K - k","L - l","M - m","N - n","O - o","P - p",
"Q - q","R - r",u"Ř - ř","S - s",u"Š - š","T - t",u"T´ - t´","U - u","V - v","W - w","X - x","Y - y","Z - z",u"Ž - ž"]
pocetRadku = 4
pocetSloupcu = 8
for poradi in range(32):
radek = poradi / pocetSloupcu
sloupec = poradi % pocetSloupcu
p = 0
pismeno=abeceda[p] #- při seřazení dle abecedy
abeceda.remove(pismeno)
tlacitkoSerazena = Button(text=pismeno, font="Tahoma 14", width=velikost*3, height=velikost,
relief="groove",bg="lightgreen", fg="blue", overrelief="solid", activebackground="yellow") #akt.reliéf
#alternat. reliéf myš nad tlačítek, barva pozadí aktivního tlačítka,
tlacitkoSerazena.grid(row=radek, column=sloupec)
tlacitkoSerazena.bind("<Button-1>", klik)
tlacitkoSerazena.bind("<Button-3>", klikPravym)
#tlacitkoSerazena.bind("<Button-2>", klikKoleckem)
seznamTlacitek.append(tlacitkoSerazena)
p = p + 1
hlavni = Tk()
hlavni.title("Abeceda" + " od : SAVKA")
hlavni.config(bg="#4fa7ff")
velikost = 3
seznamTlacitek = []
tlacitkoZamychej=Button(text=u"Zamýchej", font="Tahoma 14",width=velikost*3, height=velikost,relief="groove",
bg="red", fg="yellow", overrelief="solid", activebackground="yellow")
tlacitkoZamychej.grid(row=1, column=9)
tlacitkoZamychej.bind("<Button-1>", zamychej)
tlacitkoSerazena=Button(text=u"Seřazená", font="Tahoma 14",width=velikost*3, height=velikost,relief="groove", bg="#006633", fg="white", overrelief="solid", activebackground="yellow")
tlacitkoSerazena.grid(row=0, column=9)
tlacitkoSerazena.bind("<Button-1>", serazenaAbeceda)
tlacitkoKonec=Button(hlavni,text="Konec", font="Tahoma 14",width=velikost*3, height=velikost,relief="groove",
bg="yellow", fg="red", overrelief="solid", activebackground="yellow")
tlacitkoKonec.grid(row=2, column=9)
tlacitkoKonec.bind("<Button-1>", konec)
hlavni.mainloop()
sys.exit()
1) nechápu
2) kdyby to mělo přehrávat ten zvuk při kliknutí tak bych to dělal asi takle:
if len(udalost.widget["text"]) > 0:
print "zvuk: ", '%s.mp3'%udalost.widget["text"][0]
jinak se mi líbí jak je to řešený, je to přehledný a i hezký barvy ;-)
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
jak ho zobrazit po kliknutí na tlačítko místo daného písmenka.
to je lehký ne? v tý funkci klik smažeš text tlačítka a pak už jenom:
udalost.widget["image"]=obr
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
To Blujacker: Můžeš mi prosím ještě vysvětlit, jak toto
if len(udalost.widget["text"]) > 0:
print "zvuk: ", '%s.wav'%udalost.widget["text"][0]
použít.
Vím co to provede, ale nemohu příjít na to využít k přehrání zvuku. Když za "%s" dosadím určitý soubor, tak to přehraje.
Když to napíši takto:
def klikPravym(udalost):
abeceda=["A - a","B - b","C - c",u"Č - č","D - d","E - e","F - f","G - g","H - h","CH - ch","I - i","J - j","K - k","L - l","M - m","N - n","O - o","P - p",
"Q - q","R - r",u"Ř - ř","S - s",u"Š - š","T - t",u"T´ - t´","U - u","V - v","W - w","X - x","Y - y","Z - z",u"Ž - ž"]
stitek=Label(text=udalost.widget["text"],font="Tahoma 14",fg="#0033ff",bg="white", width= 9, height= 2,)
stitek.grid(row=3, column=9)
udalost.widget["bg"] = "#%02x%02x%02x" % (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) #náhodná barva od "D1ce"
if len(udalost.widget["text"]) > 0:
for x in abeceda:
if x == "%s.wav"%udalost.widget["text"][0:]:
winsound.PlaySound("%s.wav", winsound.SND_FILENAME|winsound.SND_ASYNC)
tak to neudělá nic, ani to nehlásí chybu.
Už jsem na to přišel, sice to trvalo, ale přece.
for zvuk in abeceda:
if zvuk == udalost.widget["text"][0:]:
winsound.PlaySound("%s.wav"%udalost.widget['text'][0:], winsound.SND_FILENAME|winsound.SND_ASYNC)
Chce to se pořádně a pozorně dívat.Co je toto za chybu prosím. Shell ji vytiskne, když kliknu na písmenka s diakrtikou.
Exception in Tkinter callback Traceback (most recent call last): File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__ return self.func(*args) File "C:\Python25\programky\ABC\abeceda.py", line 18, in klik winsound.PlaySound("C:\Python25\programky\ABC\zvuk\%s.wav"%udalost.widget['text'][0:], winsound.SND_FILENAME|winsound.SND_ASYNC) UnicodeEncodeError: 'ascii' codec can't encode character u'\u010c' in position 31: ordinal not in range(128)
tady je začátek kódu, řádek 18 je ten poslední z kódu.
# -*- coding: utf-8 -*-
# "Abeceda" + " od : SAVKA"
from Tkinter import *
import sys, random, winsound
import Image, ImageTk
def konec(udalost):
hlavni.quit()
def klik(udalost):
udalost.widget["bg"] = "#%02x%02x%02x" % (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) #náhodná barva od "D1ce"
abeceda = ["A - a","B - b","C - c",u"Č - č","D - d","E - e","F - f","G - g","H - h","CH - ch","I - i","J - j","K - k","L - l","M - m","N - n","O - o","P - p",
"Q - q","R - r",u"Ř - ř","S - s",u"Š - š","T - t",u"T´ - t´","U - u","V - v","W - w","X - x","Y - y","Z - z",u"Ž - ž"]
for zvuk in abeceda:
if zvuk == udalost.widget["text"][0:]:
winsound.PlaySound("C:\Python25\programky\ABC\zvuk\%s.wav"%udalost.widget['text'][0:], winsound.SND_FILENAME|winsound.SND_ASYNC)
Děkuji.
jj, s češtinou jsou problémy. Doporučuji na chvíli poodstoupit od tohoto programu a nastudovat pythonovskou češtinu: buď tady někde v kurzu nebo na http://www.py.cz/UnicodeEncodeError.
taky si myslím, že máš zbytečně for zvuk in abeceda: ... Přece nemusíš vše procházet pokažfé. Prostě
Když je něco na tlačítku:
tak to přehraj
if len(udalost.widget["text"]) > 0:
winsound.PlaySound("C:\Python25\programky\ABC\zvuk\%s.wav"%udalost.widget['text'][0:], winsound.SND_FILENAME|winsound.SND_ASYNC)
nebo lépe
tl=udalost.widget["text"]
if tl:
winsound.PlaySound("C:\Python25\programky\ABC\zvuk\%s.wav" % tl, winsound.SND_FILENAME|winsound.SND_ASYNC)
bez záruky, nezkoušel jsem sem,
Taky to ["text"][0:] je podezřelé, spíš bych to viděl jen na ["text"]
To geon:
Ty články s češtinou jsem pročetl, ale stále nemohu vybruslit se shora uvedené chyby na níže uvedeném řádku kódu.
winsound.PlaySound("C:\Python25\programky\ABC\zvuk\%s.wav"%udalost.widget['text'], winsound.SND_FILENAME|winsound.SND_ASYNC)
Jak ten řádek kódu ošetřit, když to mám to uložené třeba jako: "Č - č.wav", "Š - š.wav" apod?
musíš nejlépe odzačátku.
např. pomocí if os.path.isfile(....) zjistíš:
* jestli jsi ve správném adresáři (když z názvu souboru vypustíš češtinu)
* až si budeš jistý, přidáš češtinu do názvu a budeš laborovat s kodovaním
* vytvoř takový malý script (5 řádek?), kde budeš toto ověřovat a pokud ti to nepůjde, ten script sem dej včetně chyby a pokusíme se najít chybu. taky bude dobré vědět tvůj os.
* až tohle rozchodíš, tak pak už by s tím tvým programem neměl být problém, protože řešení vlastně použiješ tam
Tady je ten script:
# -*- coding: cp1250 -*-
import os
if os.path.isfile(u"C:\Python25\programky\ABC\Č - č.wav"):
print "ano", os.listdir(os.getcwd())
else:
print "ne",os.listdir(os.getcwd())
Tady výpis po spuštění programu:
ano ['A - a.wav', 'abc2.py', 'abeceda.py', 'B - b.wav', 'C - c.wav', 'Ch - ch.wa
v', 'D - d.wav', 'E - e.wav', 'F - f.wav', 'G - g.wav', 'H - h.wav', 'I - i.wav'
, 'J - j.wav', 'K - k.wav', 'L - l.wav', 'M - m.wav', 'N - n.wav', 'O - o.wav',
'P - p.wav', 'Q - q.wav', 'R - r.wav', 'S - s.wav', 'T - t.wav', 'U - u.wav', 'V
- v.wav', 'V3228397.py', 'W - w.wav', 'X - x.wav', 'Y - y.wav', 'Z - z.wav', 'z
ji\x9at\xecn\xed souboru.py', '\xc8 - \xe8.wav', '\x8a - \x9a.wav']
Tady chyba po stisknutí tlačítka "Č - č":
Č - č
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "C:\Python25\programky\ABC\V3228397.py", line 21, in klik
winsound.PlaySound(u"C:\Python25\programky\ABC\%s.wav"%udalost.widget['text'
], winsound.SND_FILENAME|winsound.SND_ASYNC)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u010c' in position 2
6: ordinal not in range(128)
OS : Win XP Pro, SP2, kódování jsem změnil i v PSPadu a zkusil všechny.
Prosím tedy o pomoc. Děkuji
No já nevím, ale mě funguje pouhé:
# -*- coding: cp1250 -*-
import winsound
winsound.PlaySound("Č - č.wav", winsound.SND_FILENAME)
V deklaraci může být i utf-8 (ale samozřejmě se to musí v tomto kodování pak i uložit)
S u"Č - č.wav" mi to nefungovalo, winsound asi unicode nezvládá.
jo a vyhýbal by se absolutním cestám (u"C:\Python25\programky\ABC\Č - č.wav"), proč nepoužít relativní u"Č - č.wav", pokud máš muziku ve stejné složce jako script. Tam může být také chyba a když to budeš distribuovat, bude to fungovat všem, ne jen když budu mít adresář "C:\Python25\programky\ABC ;-)
To geon: Díky moc. Vyřešil jsem to takto:
try:
if len(udalost.widget["text"]) > 0:
winsound.PlaySound("%s.wav"%udalost.widget['text'], winsound.SND_FILENAME|winsound.SND_ASYNC)
except:
if udalost.widget["text"] == u"Č - č":
winsound.PlaySound("Č - č.wav",winsound.SND_ASYNC)
elif udalost.widget["text"] == u"Š - š":
winsound.PlaySound("Š - š.wav",winsound.SND_ASYNC)
Jak jste to napsal v posledním příspěvku, tak mi to taky šlo.
A je hotovo. Díky všem za pomoc. Jak Blujacker napíše článek o převodu do *.exe, zkusím to převést.
Jak Blujacker napíše článek o převodu do *.exe, zkusím to převést.
Já bych to napsal, ale nejsem eště redaktor...
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
jestli myslíš jak získat obah udělátka Text, tak by to bylo takto:
text.get(1.0,END)
více na http://www.tkintercz.wz.cz/text.htm
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
No, existuje například pygame: http://www.geon.wz.cz/pygame/
ale hra se dá udělat i v Tk.
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
VojtaK píše:#
# Prosim da se nejak soubory s priponou *.py prevect na soubory s priponou *.exe
už sem to tady několikrát vysvětloval:
http://programujte.com/forum.php?akce=prispevek&id=2846#20599
asi 8 příspěvek...
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
místo soubor nápíšeš jméno toho souboru, ze kterého chceš udělat exe...
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
koukám že sis ten návod nepřečetl celej, píšu tam:
uložíš, otevřeš příkazovou řádku, pomocí příkazu cd se přesuneš do adresáře kde má skript a setup.py a zavoláš:
python setup.py py2exe
a to ti vytvoříí exe, hotovo;-)
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
já má zkušenosti pouze se slučováním C a pythona. Řešilo se to zde: http://www.py.cz/pipermail/python/2006-December/005272.html
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Ale napsalo mi to:
Traceback (most recent call last):
File "D:/Python25/c++-python.py", line 9, in <module>
ext_modules = [module1])
File "D:\Python25\lib\distutils\core.py", line 139, in setup
raise SystemExit, gen_usage(dist.script_name) + "\nerror: %s" % msg
SystemExit: usage: c++-python.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: c++-python.py --help [cmd1 cmd2 ...]
or: c++-python.py --help-commands
or: c++-python.py cmd --help
error: no commands supplied
omg, zase sis to nepřečetl... musíš opět do příkazové řádky a napsat:
python setup.py build
nicméně ten příklad co je na první straně konference nefunguje..
zkus tohle:
#include <Python.h>
static PyObject *spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS,"Execute a shell command."}
,{NULL, NULL, 0, NULL} /* Sentinel */
};
PyMODINIT_FUNC initspam(void)
{
PyObject *m;
m = Py_InitModule("spam", SpamMethods);
}
btw, to není moje práce. Toto mi někdo (bohužel sem zapomšěl kdo poslal na e-mail)
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
To Blujacker:
Ale napsalo mi to pri prekladani chybu:
--------------------Configuration: Python - Win32 Debug--------------------
Compiling...
Hlava.cpp
Linking...
LINK : fatal error LNK1104: cannot open file "python25_d.lib"
Error executing link.exe.
Python.exe - 1 error(s), 0 warning(s)
tady s tím bys měl jít do konference.. tady to je forum pro začátečníky...
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
If else - lekce 3 — založil Ymemgirei
Moderátoři diskuze