Tkinter button problem – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Tkinter button problem – Python – Fórum – Programujte.comTkinter button problem – Python – Fórum – Programujte.com

 

Carduus
~ Anonymní uživatel
52 příspěvků
17. 6. 2011   #1
-
0
-

Dobrý den,
zkusil jsem napsatt takový menší program okno funguje ale když kliknu na hrát tak mi to napíše tohle:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
TypeError: realmlist() takes no arguments (1 given)

Tady je muj program :

import os
from Tkinter import *

def ok():
os.system('WoW.exe')

def realmlist():
if option == 'Czechdream':
soubor = file('realmlist.wtf', 'w')
soubor.write('set realmlist aegwyn.czechdream.cz')
soubor.close()


elif option == 'Twinstar':
soubor = file('realmlist.wtf', 'w')
soubor.write('set realmlist wow.twinstar.cz')
soubor.close()


elif option == 'Deffender':
soubor = file('realmlist.txt', 'w')
soubor.write('set realmlist deffender.herniserver.cz')
soubor.close()


hlavni = Tk()
hlavni.option_add('*Font', 'Xirwena')


promenna = StringVar(hlavni)
promenna.set('Deffender')

photo = PhotoImage(file = 'Launcher obrazky.gif')

label = Label(hlavni, image = photo)
label.image = photo
label.grid(row=0, column=01)


oknopod = Label(hlavni)
oknopod.grid(row=1, column=1)

hrat = Button(oknopod, text='Hrát', width=65, height=1)
hrat.bind("<Button-1>", realmlist)
hrat.grid(row=1, column=1, stick=E)

option = OptionMenu(oknopod, promenna, 'Czechdream', 'Twinstar', 'Deffender')
option.grid(row=1, column=0, stick=W)

hlavni.mainloop()

Děkuji za každou radu

Nahlásit jako SPAM
IP: 109.235.1.–
nervak0
Věrný člen
18. 6. 2011   #2
-
0
-

realmlist() takes no arguments (1 given)


Funkce pro obsluhu událostí dostávají jako parametr objekt s popisem té události. Takže takhle:
def realmlist(event):
Ale tebe asi zajímá zmáčknutí toho buttonu (což nemusí být zrovna myší) a ne kliknutí levým myšítkem (které sice vede ke zmáčknutí buttonu, ale jinak je to úplně jiná událost). Takže vyhoď bind a nastav buttonu command (a realmlist nech jak je, bez parametru).
Button(..., command=realmlist, ...)

Nahlásit jako SPAM
IP: 213.211.51.–
Carduus
~ Anonymní uživatel
52 příspěvků
18. 6. 2011   #3
-
0
-

Děkuji už mi to neukazuje žádnou chybu (já nikdy moc nerozuměl u definice tomu, co je v závorkách)

Button(..., command=realmlist, ...) jsem nejdříve měl, ale když jsem poté v programu klikl na Hrát, tak se nic nestalo (nevytvořil se ani soubor, ani se nic nespustilo), ale to samé mi to teď dělá i u metody bind
Napadlo mě, že si možná nerozumí OptionMenu s if option == '...'
Jinak opravdu netuším co s tím je

Nahlásit jako SPAM
IP: 109.235.1.–
nervak0
Věrný člen
18. 6. 2011   #4
-
0
-

Aha, toho jsem si ani nevšiml - option je to menu. Vybraná hodnota je v promenna.

A to v těch závorkách jsou jména parametrů. Takže můžeš definovat třeba funkci se dvěma parametry:

def vypissoucet(a, b):

print a, '+', b, '=', a + b

vypissoucet(2, 3)
Ale to bys měl znát...

Nahlásit jako SPAM
IP: 213.211.51.–
Carduus0
Návštěvník
18. 6. 2011   #5
-
0
-

Už jsem to pochopil děkuji.
A ten script taky funguje takže super moc díky.
Ještě bych se rád zeptal na 2 věci jestli můžu:
Jak zamknout hlavní okno aby se nedal zvětšovat/zmenšovat?
Při spuštění se otevře normální černé okno a Tkinter a při spuštění WoW.exe ještě C:\Windows\system32\cmd.exe nešli by ty 2 prázdná okna nějak zrušit nebo aspoň skrýt? (když zavřu to černé okno, zavře se mi i Tkinter což nechci)

EDIT// VYŘEŠENO problem s x96... složka přejmenovana a lomena psána / místo \


Nahlásit jako SPAM
IP: 109.235.1.–
nervak0
Věrný člen
18. 6. 2011   #6
-
0
-

Změnu šířky a výšky můžeš zakázat funkcí resizable.

hlavni.resizable(False, False)
Normálně se skripty spouští přes python.exe, což je konzolová aplikace s tím černým oknem. Pak je ještě pythonw.exe, který je bez toho okna. Když skriptu změníš příponu z .py na .pyw, tak se bude spouštět přes pythonw, tedy bez toho okna.

os.system() spouští příkazy přes cmd.exe, což je zase konzolová aplikace. Můžeš ten program spustit přímo. Třeba takhle
import subprocess

subprocess.call('WoW.exe')
-- Než jsem to dopsal, tak jsi toto už obešel, ale nechám to tady --

Zpětné lomítko má v řetězci speciální význam ( 'aaa\nbbb' - \n nový řádek, 'aaa\'bbb' - \' apostrof v řetězci uvozeném apostrofy, ...). Pokud chceš do řetězce zapsat přímo to lomítko, tak ho zapiš zdvojeně jako \\. (Další věc pak je, že ne na všech systémech se položky cesty oddělují zpětným lomítkem, ale to nemusíš řešit.)

\x96 je jedna z těch speciálních sekvencí (a znamená "znak s kódem 96 v šestnáctkové soustavě") a v kódování Windows je to pomlčka. Předpokládám, že se ten adresář opravdu jmenuje "WorldofWarcraft–kopie". Nevím proč to tu cestu nevezme, asi problém s kódováním, ale tady je to celkem jedno.

Relativní cesta je relativní k aktuálnímu adresáři, takže nemusíš zjišťovat aktuální adresář a k němu přidávat (protože aktuální adresář neměníš, takže ta relativní cesta bude pořád platná).
cesta = 'Data\\enGB' # nebo '.\\Data\\enGB'

...
soubor = file(cesta+'\\realmlist', 'w')

Nahlásit jako SPAM
IP: 213.211.51.–
Carduus0
Návštěvník
18. 6. 2011   #7
-
0
-

Moc děkuji.
Ještě bych se chtěl zeptat co to zmenšování/zvětšování okna? (příspěvek nad :))

Nahlásit jako SPAM
IP: 109.235.1.–
nervak0
Věrný člen
18. 6. 2011   #8
-
0
-

Oba editujeme ve špatnou dobu :)

Nahlásit jako SPAM
IP: 213.211.51.–
Carduus0
Návštěvník
18. 6. 2011   #9
-
0
-

Jj :-)
Když už jsem se rozepsal...: udělal jsem funkci na zavření hl okna hned poté co se spustí WoW.exe ,ale je problém, že okno se nezavře ale začne neodpovídat (nejspíše je to tím, že když zavřu WoW.exe tak se okno taky zavře, takže asi na sobě jsou závislé)
Nešlo by s tím něco udělat?
Omlouvám se, že se tak blbě vyptávám

Nahlásit jako SPAM
IP: 109.235.1.–
nervak0
Věrný člen
18. 6. 2011   #10
-
0
-

subprocess.Popen('WoW.exe')

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Problém s Tkinter — založil bohetik

On/Off button — založil Martin

Like Button — založil Marek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý