Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:

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
Avatar
hanpari
Redaktor
Avatar
hanpari:

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
Redaktor
Avatar
Odpovídá na Inoue Yūki
hanpari:

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
Inoue Yūki
Redaktor
Avatar
Odpovídá na hanpari
Inoue Yūki:

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
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Inoue Yūki
hanpari:

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.