NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Neaktivní uživatel:7.4.2015 19:13

Zdravím! V XAMLu si na formuláři volám událost KeyDown a v Pythonu si potom vytvořím funkci:

def keyboard_events( self, sender, e ):
        pass

Když ale zkouším získat hodnotu e.Key, vždy mi to vyplivne chybovou hlášku, že proměnná "e" takovou vlastnost nemá. Jak můžu odchytávát události?

Odpovědět
7.4.2015 19:13
Neaktivní uživatelský účet
Avatar
hanpari
Člen
Avatar
hanpari:8.4.2015 14:49

Tohle vypadá jako IronPython. V principu ale můžeš zachytávat události v pythonu takto, tj. využíváš skutečnosti, že i funkce jsou v pythonu objekty.:

class TestClass1():
    _value = 0

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, val):
        self._value = val
        self.on_change_value(self)

    def on_change_value(self):
        pass

class TestClass2():
    _value = 0

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, val):
        self._value = val
        self.on_change_value(self)

    def on_change_value(self):
        pass


def on_changed(obj):
    print("Hodnota {} se změnila na {}".format(obj, obj.value))





t1 = TestClass1()
t2 = TestClass2()
#navážeš událost pro obě třídy
t1.on_change_value = on_changed
t2.on_change_value = on_changed
t1.value = 10 #vypíše změny
t1.value = 20
t2.value = 50
#Odpojíš funkci
t1.on_change_value = lambda *args:None
t1.value = 100 # už nic nevypíše
Editováno 8.4.2015 14:51
 
Nahoru Odpovědět
8.4.2015 14:49
Avatar
hanpari
Člen
Avatar
Odpovídá na Neaktivní uživatel
hanpari:8.4.2015 15:14

Jinak jsem to zkusil v SharpDevelopu a po chvíli boje mi to normálně funguje. že e takovou vlastnost nemá mi píše jen tehdy, když jsem se pokusil zachytávat událost myši. Je ale pravda, že mi to funguje s TextBoxem, se samotným formulářem jsem to nerozchodil.

 
Nahoru Odpovědět
8.4.2015 15:14
Avatar
Odpovídá na hanpari
Neaktivní uživatel:8.4.2015 15:47

Ano, samozřejmě jde o IronPython. Díky za odpověď, ukázalo se, že mi jen Visual Studio z nějakého důvodu nenapovídalo a ukazovalo, že "e" je neznámého typu. Potom, co jsem ze zoufalosti napsal to zdánlivě nefungující řešení, přeložil jsem to a fungovalo to podle očekávání.

Nahoru Odpovědět
8.4.2015 15:47
Neaktivní uživatelský účet
Avatar
hanpari
Člen
Avatar
Odpovídá na Neaktivní uživatel
hanpari:8.4.2015 16:14

To bude proto ze python je dynamicky typovany a intellisense s tim ma logicky potiz.

 
Nahoru Odpovědět
8.4.2015 16:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.