abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 00:55 | Pozvánky

    Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do

    … více »
    bkralik | Komentářů: 0
    včera 11:33 | Nová verze

    Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.

    Ladislav Hagara | Komentářů: 0
    včera 03:55 | IT novinky

    Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.

    Ladislav Hagara | Komentářů: 1
    10.10. 23:11 | Bezpečnostní upozornění

    Soutěž Pwn2Own Ireland 2026 skončila 9. října. Bezpečnostní výzkumníci získali celkem 1 262 000 dolarů na odměnách. Během soutěže bylo předvedeno zneužití 98 zero-day zranitelností. Testování zahrnovalo různé kategorie zařízení a software. Výzkumníci předváděli prakticky fungující útoky podle pravidel soutěže. Výsledky následně slouží výrobcům při přípravě oprav. Mezi pokořenými jsou: Samsung Galaxy S26, OpenAI Codex, Oracle Autonomous AI Database, Google Pixel 10, u iPhone 17 neuspěli.

    vencour | Komentářů: 0
    9.10. 22:44 | Nová verze

    Programovací jazyk Python byl vydán v nové verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 19
    9.10. 22:33 | Zajímavý projekt

    BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.

    ❗Červivý Hřib krade❗ | Komentářů: 9
    9.10. 11:55 | Upozornění

    V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."

    Ladislav Hagara | Komentářů: 14
    9.10. 09:55 | IT novinky

    Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.

    Ladislav Hagara | Komentářů: 12
    9.10. 09:44 | IT novinky

    Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.

    Ladislav Hagara | Komentářů: 13
    9.10. 09:33 | Nová verze

    Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2832 hlasů
     Komentářů: 32, poslední včera 17:02
    Rozcestník

    Nové problémy v Pyqt4

    4.1.2012 21:22 | Přečteno: 1706× | Linux | Výběrový blog

    V zápisku http://www.abclinuxu.cz/blog/Tomik/2011/6/pyqt4-a-pouziti-modulu-uic jsem popsal práci a modulem uic v Pyqt4. Časem jsem narazil na jednu věc, která mě z počátku rozhodila a stojí za zápisek.

    Úvod

    Vezměme si příklady ze zmiňovaného zápisku. Soubor priklad.ui je stejný jako minule.
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>98</width>
        <height>46</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <widget class="QPushButton" name="pushButton">
        <property name="geometry">
         <rect>
          <x>9</x>
          <y>9</y>
          <width>75</width>
          <height>23</height>
         </rect>
        </property>
        <property name="text">
         <string>PushButton</string>
        </property>
        <property name="checkable">
         <bool>true</bool>
        </property>
       </widget>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
    Příklad bude trochu jiný, než minule. Za prvé jsem přešel na Python 3.2 (takže musím psát print jako funkci, ale to je jen kosmetická změna kódu), za druhé jsem na objekt jsem přidal jednu vlastnost (property).
    #!/usr/bin/env python
    import sys
    from PyQt4 import QtGui, QtCore, uic
    
    class MyApplication(QtGui.QMainWindow):
        def __init__(self):
            QtGui.QMainWindow.__init__(self)
            uic.loadUi("priklad.ui", self)
    
        def run(self):
            self.show()
            self.app.exec_()
    
        @QtCore.pyqtSlot(bool, name="on_pushButton_clicked")
        def method_with_some_weird_name(self, value):
            print ("Clicked {}".format(value))
    
        @QtCore.pyqtSlot(bool)  # without this line the slot catches two signals: clicked() and clicked(bool)
        def on_pushButton_clicked(self, value):
            print ("Clicked2 {}".format(value))
    
        def closeEvent(self, event):
            print ("Close event")
            event.accept()
    
        @property
        def something(self):
            print("Property get something called")
        @something.setter
        def something(self, value ):
            print("Property set something called with value {}".format(value))
    
    def main():
        app = QtGui.QApplication(sys.argv)
        MyApp = MyApplication()
        MyApp.app = app
        MyApp.run()
    if __name__ == '__main__':
        main()
    

    Problém

    Když příklad spustíte, uvidíte výpis
    Property get something called
    což není úplně to, co by člověk chtěl. V tomto případě je to neškodné, ale pokud se za vyčtením vlastnosti skrývá něco jiného, než přeposlání atributu (attribute) objektu, může to způsobit potíže. Toto chování nezáleží na tom, jestli je vlastnost zapsaná pomocí dekorátoru nebo pomocí funkce property().

    Pokud bude vyčtení vlastnosti například zahrnovat delší výpočet, máme na krku výkonostní problémy. Pokud vyčtení vlastnosti mění stav objektu, může to působit velké potíže v aplikaci a mnoho šedin programátorovi (kdybyste si třeba chtěli počítat, kolikrát byla vyčtena vlastnost, falírovala by tam jednička). Pokud by nedej Bože vyčtení vyžadovalo výpočet s něčím, co není v tu chvíli inicializované (například nastavení něčeho, co se nastavuje z venku přes setter), máme na krku velký problém.

    Vysvětlení

    Tento výpis má na svědomí volání funkce QtCore.QMetaObject.connectSlotsByName, která se volá ve funkci createConnections v souboru uicparser.py (v mé verzi Pyqt 4.8.5 to je řádek 861). Dokumentace k tomu píše:

    Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form ...

    Nezkoumal jsem to až tak do podrobna, ale myslím si, že to rekurzivní hledání způsobí zavolání všech vlastností.

    Závěr

    Pokud používáte v Pythonu zhusta vlastnosti (properties), tak se při programování s PyQt zamyslete, jestli čtení vlastnosti nemůže způsobit problémy, pokud s to stane v nevhodnu chvíli.

    Možných řešení, jak problém řešit je víc, ale zatím jsem nepřemýšlel, jak to udělat co nejelegantněji. Možná řešeni jsou například: neprogramovat vůbec, neprogramovat s Pyqt, neprogramovat v Pythonu, či nepoužívat vlastnosti. Dalším možným řešením je taky nepoužívat dědičnost (viz 1. příklad v minulém dílu).

    Teď se do mě pusťtě a napište, jaké jednoduché řešení jsem přehlédl.        

    Hodnocení: 100 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    5.1.2012 14:07 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    Anebo nepoužívat properties u tříd děděných z QtCore.QMetaObject?
    When your hammer is C++, everything begins to look like a thumb.
    5.1.2012 18:18 w4rr10r
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    ... PS / 2 konektor pro vytvoření rovnováhy dědictví s nadstandardními funkcemi.
    PS/2 je technicky lepší než USB, teda aspoň pro klávesnice.
    5.1.2012 21:44 Tomáš | skóre: 31 | blog: Tomik
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    To jsem na konci taky psal, i když jsem to zformuloval ne moc zřetelně. Každopádně 1. příklad z minulého zápisku tímto neduhem netrpí (zkoušel jsem, i když to je patrné i bez toho).
    Bedňa avatar 7.1.2012 13:14 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    KERNEL ULTRAS video channel >>>
    8.1.2012 10:39 Tomáš | skóre: 31 | blog: Tomik
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    Tak tohle jsem neznal. Mohl bys zkusit ten příklad v Pyside a napsat, jestli to trpí stejným problémem?
    Bedňa avatar 8.1.2012 22:05 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    Ja tento projekt len poznám, je aktívne podporovaný Nokiou a pod linciou LGPL. Počítam že pri aktívnom vývoji už majú takéto veci vychytané.
    KERNEL ULTRAS video channel >>>
    9.1.2012 09:54 Tomáš Pěnička
    Rozbalit Rozbalit vše Re: Nové problémy v Pyqt4
    No tak jsem to zkouknul a PySide nemá náhradu za PyQt4.uic.loadUi. Takže v tomto případě nemá smysl obě knihovny porovnávat.

    I ten původní problém je způsoben Pythonem samotným. V C++ se nedá za vyčtění atributu schovat volání funkce, takže tam to problémy neudělá. Ale je možné, že PyQt tam dělá něco, co by mělo být programátorovi skryto.

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.