Jak se v Tkinteru dá zakomponovat pohyb závislý na stisku klávesy v livewires to mám ale v tkinteru na to nemuzu prijit :((
Fórum › Python
Roboti přicházejí v Tkinteru
No díky za ten odkaz ten pomohl, ale nevim jak udělat ten pohyb. Zkoušel jsem to metodou canvas.move(parametry),ale nějak mě to moc neposlouchá :D .Takže se ptám jak pracuje Tkinter s obrazci jako je kruh a hlavně s jeho souřadnicemi.(v livewires u kruhu prostě zadám souřadnice středu, ale v Tkinteru 4 souřadnice ) :((
[i]No díky za ten odkaz ten pomohl, ale nevim jak udělat ten pohyb. Zkoušel jsem to metodou canvas.move(parametry),ale nějak mě to moc neposlouchá? :D[/i]
to je divný, asi někde děláš chybu. Našel jsem v archivu tento script, který mi funguje. Snad to z toho pochopíš lépe než kdybych to popisoval:
from Tkinter import *
def move():
platno.move(kruh, 5,5)
zaklad=Tk()
platno=Canvas(zaklad, bg='white')
platno.pack()
kruh=platno.create_oval(20,20,30,30, fill='red')
platno.create_window((10,10), window=Button(text="a", command=move))
mainloop()
[i](v livewires u kruhu prostě zadám souřadnice středu, ale v Tkinteru 4 souřadnice ) :((
[/i]
no, jestli se nepletu, tak livewires je postavená na Tkinter. Chci tím říci, jestli umíš trochu algebraickou geometrii, že by neměl být problém udělat funkci, která přijímá střed a poloměr, a vrací 4 souřadnice (souřadnice rohů opsaného čtverce). V livewires je to určitě tak udělané.
nevzdávej to ;-)
No pomohlo mi to moc u? mi to chod? jak chci j? :D V livewires uz to t?m?? m?m cel?(j??t? ?rot a je to :D) a v tkinteru to zkou??m (ale zat?m nevím jak v tkinteru ud?l?m sr??ky, jako v livewires to asi nepujde).
Je?t? k livewires: Psal si, ?e 1 krok hra?e by m?l b?t asi 0.02 a robot? t?eba t?etina, ale kdy? to tak d?m a d?m tam t?ebas 50 robot? tak se to dost kou?e z toho vypl?v? ?e tam m?m asi n?jakou chybu :D ale fakt nevím v ?em, ale neboj nevzd?m to dokud to nebude b?hat tak jak budem p?skat :skunk2:
[i]v tkinteru to zkou??m (ale zat?m nevím jak v tkinteru ud?l?m sr??ky,[/i]
http://tkintercz.wz.cz/canvas.htm#Tkinter.Canvas.find_enclosed-method
http://tkintercz.wz.cz/canvas.htm#Tkinter.Canvas.find_overlapping-method
[i]Je?t? k livewires: Psal si, ?e 1 krok hra?e by m?l b?t asi 0.02 a robot? t?eba t?etina, ale kdy? to tak d?m a d?m tam t?ebas 50 robot? tak se to dost kou?e z toho vypl?v? ?e tam m?m asi n?jakou chybu :D[/i]
mo?n? ?e ne, kdy? jich d?m 50 tak se mi to kou?e taky :-) ty ??sla co jsem dal, jsou experiment?ln? a m??e? je zm?nit. Krok m?m tak mal?, abych tam nikde nemusel m?t sleep() a ?e maj? t?etinovou rychlost, tak to je abych jim stihnul ut?ct ;-)
to kous?n? by mohla vy?e?it n?jak? optimalizace ...
No ale nen? to divn? ?e se tak primitivn? hra kou?e(nev?m jak se to d? optimalizovat)? Jinak v livewires u? to m?m t?m?? hotov? u? chyb? jen zji?t?n? jestli hr?? vyhr?l, proto?e zat?m nevím jak ud?lat aby se p?es hru napsal n?jakej n?pis nebo tak :skunk: .A te? hur? na ten Tkinter :D
t?m?? v?e, co Livewires um? je zde: http://www.geon.wz.cz/livewires/g-graphics.html, tedy i ten text...
jo, pravda je, ?e livewires je na TKinter postaven?, tak?e by to j?t m?lo. Je to ale trocha magie, kv?li tomu, ?e v livewries jsou jm?na prom?nn?ch vcelku slo?it? a je?t? k tomu jsou n?kter? tzv. chr?n?n?. Plocha v livewires nen? nic jin?ho ne? Canvas z Tkinter.
V livewires to tedy vypad? takto (zjednodu?eno):
def begin_graphics(width=640, height=480, background=Colour.white, title=None):
global _root_window, _canvas, _canvas_x, _canvas_y, _canvas_xs, _canvas_ys
# Create the root window
_root_window = Tkinter.Tk()
_root_window.protocol('WM_DELETE_WINDOW', _destroy_window)
if _Windows:
_root_window.bind('<Alt-F4>', _destroy_window)
_root_window.title(title or 'Graphics Window')
_root_window.resizable(0, 0)
# XXX Should we force the input focus into the window?
# Create the canvas object
try:
_canvas = Tkinter.Canvas(_root_window,
width=width, height=height,
bg=background._toTk())
_canvas.pack()
_canvas.update()
except:
_root_window.destroy()
_root_window = None
raise
root je jako _root_window a canvas jako _canvas. Zd?lo by se, ?e by tedy m?lo sta?it napsat:
_root_window.focus() # nebo
_root_window.focus_force() # nebo focus_set()
Ale to nefunguje, proto?e jm?na, kter? za??naj? na podtr??tko jsou "chr?n?n?" a nejsou do na?eho programu vta?ena pomoc?
from livewires import *
Mus?me to ud?lat ru?n?. tedy:
from livewires.beginners import _root_window
# vyzkou?ej na p??kazov? ?d?ce po zav?en? okna livewires nebo po CTRL+C v ?ern?m okn? p?i spu?t?n? h?e:
print _root_window # a podobn?
to livewires.beginners je tam proto, ?e livewires je poiuze slo?ka v site-packages a v n? jsou 3 py souboru. Pokud nic nezad??, tak se bere ten z __init__.py. A tam je from beginners import *. Tak?e my mus?me ??hnout p??mo do souboru beginners a to se d?l? pr?v? takto.
A pak by ji? m?lo fungovat vol?n? metody focus(), jak jsem napsal v??e....
No mě taky ne. Přidal sem ten kod na začátek programu, zkoušel něco poupravovat,zkoušel sem ho dát jinam, ale hned v první fci to najde chyby a tak to jde dál.
příklad chyby(nevím co se mu nelibí, když asi 5 řádků předtím měl taky příkaz move jen měl jiné souřadnice(150,240)):
Exception in Tkinter callback
Traceback (most recent call last):
File "D:Python24liblib-tkTkinter.py", line 1345, in __call__
return self.func(*args)
File "D:Python24pokus.py", line 74, in komplet
move(100,240)
File "D:Python24Libsite-packageslivewiresbeginners.py", line 328, in move
_canvas_x, _canvas_y = x, _canvas_ys-y
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
Asi tedy budu muset zrušit celé menu jinak vždy budu muset kliknout nejdřív na hrací plochu.
hmm, to je divn?. Zkusil bych toto,
move((100,240)) - sou?adnice v tuple
Pokud to bez from livewires.beginners import _root_window funguje jak m?, bude? se muset bez menu v livewires obej?t :-(
Apropo, k ?emu tam to move() m??? J? tam m?m tedy pouze 2x move_to() pro p?esun hr??e a robota. move() p?esouv? pouze aktu?ln? bod.
No to asi nevy?e??m na to nem?m. No ud?lal sem v tom menu mo?nost vybrat po?et robot? a pojmenovat si hr??e a kdyby t?eba n?kdo zadal do po?tu robot?: "!!", tak se mu otev?e hrac? okno a v n?m bude n?jak? n?pis a abzch ho napsal mus?m se p?esunout na n?jak? bod.
To menu tam asi nech?m proto?e d?l?m na v?pisu nej sk?re.
Jo a jde kdy? m?? soubor a v n?m ta jm?na+sk?re tak ty data v n?m uspo??dat podle ??sel, nebo m? napadlo ?e bych obsah toho souboru dal do seznamu a v n?m bych to se?adil(ale je?t? nevím jak).
M??u ti to kdy?tak hodit abys vid?l ty nesmysli co tam m?m a mo?n? by si v?d?l jak tam zakomponovat ten focus...(ale pochybuju ?e na to m?? ?as).
Jinak moc d?ky za rady.
[i]Jo a jde když máš soubor a v něm ta jména+skóre tak ty data v nám uspořádat podle čísel, nebo mě napadlo že bych obsah toho souboru dal do seznamu a v něm bych to seřadil(ale ještě nevím jak).[/i]
pčesně, načíst do seznamu a seřadit. Bude to pravděpodobný seznam v seznamu, dvojropzměrné pole. To bude asi nejvěhodnější.
[i]Můžu ti to kdyžtak hodit abys viděl ty nesmysly co tam mám[/i]
geon@programujte.com ;-)
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
Hra:Roboti přichází — založil Ahoj3
Livewires problém :: Roboti — založil bigdog57
Roboti od LEGA a Microsoft Robotics Studio — založil DeaLer
Textvariable v Tkinteru — založil Marek Kadlčík
Zarovnání v Tkinteru — založil maral
Moderátoři diskuze