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 21:33 | Nová verze

    Ben Sturmfels oznámil vydání MediaGoblinu 0.15.0. Přehled novinek v poznámkách k vydání. MediaGoblin (Wikipedie) je svobodná multimediální publikační platforma a decentralizovaná alternativa ke službám jako Flickr, YouTube, SoundCloud atd. Ukázka například na LibrePlanet.

    Ladislav Hagara | Komentářů: 0
    dnes 15:44 | Zajímavý software

    TerminalPhone (png) je skript v Bashi pro push-to-talk hlasovou a textovou komunikaci přes Tor využívající .onion adresy.

    Ladislav Hagara | Komentářů: 3
    dnes 12:22 | IT novinky

    Před dvěma lety zavedli operátoři ochranu proti podvrženým hovorům, kdy volající falšuje čísla anebo se vydává za někoho jiného. Nyní v roce 2026 blokují operátoři díky nasazeným technologiím v průměru 3 miliony pokusů o podvodný hovor měsíčně (tzn., že k propojení na zákazníka vůbec nedojde). Ochrana před tzv. spoofingem je pro zákazníky a zákaznice všech tří operátorů zdarma, ať už jde o mobilní čísla nebo pevné linky.

    Ladislav Hagara | Komentářů: 7
    dnes 03:44 | Komunita

    Společnost Meta (Facebook) předává React, React Native a související projekty jako JSX nadaci React Foundation patřící pod Linux Foundation. Zakládajícími členy React Foundation jsou Amazon, Callstack, Expo, Huawei, Meta, Microsoft, Software Mansion a Vercel.

    Ladislav Hagara | Komentářů: 3
    dnes 01:22 | IT novinky

    Samsung na akci Galaxy Unpacked February 2026 (YouTube) představil své nové telefony Galaxy S26, S26+ a S26 Ultra a sluchátka Galaxy Buds4 a Buds4 Pro. Telefon Galaxy S26 Ultra má nový typ displeje (Privacy Display) chránící obsah na obrazovce před zvědavými pohledy (YouTube).

    Ladislav Hagara | Komentářů: 5
    dnes 00:22 | Nová verze

    Byla vydána grafická knihovna Mesa 26.0.1 s podporou API OpenGL 4.6 a Vulkan 1.4. Je to první stabilní verze po 26.0.0, kde se novinky týkají mj. výkonu ray tracingu na GPU AMD a HoneyKrisp, implementace API Vulkan pro macOS.

    |🇵🇸 | Komentářů: 0
    včera 20:22 | Nová verze

    Byla vydána nová verze 4.6 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Využíván je Free Pascal Compiler (FPC) 3.2.2.

    Ladislav Hagara | Komentářů: 0
    včera 18:00 | Nová verze

    Byla vydána nová verze 3.23.0 FreeRDP, tj. svobodné implementace protokolu RDP (Remote Desktop Protocol). Opravuje 11 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    včera 17:44 | Zajímavý článek

    Španělský softwarový inženýr oznámil, že se mu podařilo na dálku ovládat sedm tisíc robotických vysavačů po celém světě. Upozornil tak na slabé kybernetické zabezpečení těchto technologií a jejich možné a snadné zneužití. Nesnažil se hacknout všechny robotické vysavače po světě, ale pouze propojil svůj nový DJI Romo vysavač se zařízením Playstation. Aplikace podle něj ihned začala komunikovat se všemi sedmi tisíci spotřebiči a on je

    … více »
    Ladislav Hagara | Komentářů: 9
    včera 03:33 | Humor

    Momo je fenka cavapoo, která svými náhodnými stisky kláves bezdrátové klávesnice vytváří jednoduché počítačové hry. Technicky to funguje tak, že Raspberry Pi s připojenou bluetooth klávesnicí posílá text do Claude Code, který pak v Godotu píše hry a sám je i testuje pomocí screenshotů a jednoduchých simulovaných vstupů. Za stisky kláves je Momo automaticky odměňována pamlsky. Klíčový je pro projekt prompt, který instruuje AI, aby i

    … více »
    NUKE GAZA! 🎆 | Komentářů: 26
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (11%)
     (27%)
     (2%)
     (5%)
     (2%)
     (13%)
     (26%)
    Celkem 964 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník
    Pozor, nebezpečná radiace!Ne, tento blog opravdu nemá nic společného s vývojem Linuxového jádra :-) Jako "Jaderný blog" jsem jej pojmenoval jen kvůli mé oblibě jaderné fyziky a chemie.

    Věnovat se chci především Linuxu a Free Softwaru, prezentovat zde svůj pohled na věc a věnovat se všem palčivým otázkám a problémům, na které narazím. Určitě se zde také objeví články týkající se KDE, jelikož jsem velkým milovníkem tohoto desktopového prostředí a obecně eye-candy (k velké nevůli "pravověrných" Linuxáků ;-)).

    No a když už se to tu jmenuje Jaderný blog, možná se někdy dočkáte i nějakého populárně-vědeckého příspěvku, především pokud se bude jednat o nějaké ožehavé aktuální téma...


    Aktuální zápisy

    Automatické generování UI v PyQT

    29.3.2006 18:55 | Přečteno: 1769× | Free Software | poslední úprava: 30.5.2006 20:27

    Před nedávnem jsem se začal učit Python a PyQT. Nadchla mě úžasná jednoduchost a přitom propracovanost tvorby UI v Qt Designeru. Nicméně nelíbilo se mi, že musím vygenerované .ui soubory vždy ručně "kompilovat" do pythonových zdrojáků pomocí utility pyuic, přijde mi to jako krok zpět. Proto jsem napsal v Pythonu modul, který tento proces automatizuje.

    Je to de facto moje první dílo v Pythonu (nějaké primitovní "Hello World"-like aplikace v PyQT nepočítám ;-)), proto bych chtěl poprosit všechny zdejší pythonýry, zda by se mohli na skript kouknout a ohodnotit mi ho (kde dělám např. něco né zrovna nejlépe, abych se nenaučil nějakým špatným návykům, atp.).

    Na skript se můžete podívat ZDE, použití je jednoduché:

    import pyuic
    UIClass = pyuic.uiload("cesta/k/souboru.ui").getclass()

    Otázky

    Ještě než jsem začal tento skript psát, narazil jsem i na možnost použití třídy QWidgetFactory z modulu qtui (součást PyQT). Tato třída generuje UI za běhu z .ui souboru. Jenže jsem narazil na problém - pokud tuto Qt třídu využijete, nejste pak v Pythonu schopni nijak propojovat sloty a signály. Vysvětluju si to tím, že objekty odpovídající danému UI jsou vytvořeny na úrovni Qt a Python o nich nemá pomnětí. Našel jsem dokonce článek Wrapper For QWidgetFactory, tam nabízené řešení funguje, ale přijde mi to jako takový ošklivý hack :-) Co vy na to, máte s QWidgetFactory v PyQT nějaké zkušenosti? Máte nějaké rady, řešení?

    Další otázku bych měl okolo importování vygenerované UI třídy - ve svém skriptu pyuic.py (tedy konkrétně v třídě uiload) mám i metodu setclass, která by měla prostě a jednoduše vložit vygenerovanou UI třídu přímo do jmenného prostoru (podobně jako když použijete příkaz "from modul import třída"). Je to zařízeno celkem jednoduše:

    def setclass(self):
        setattr(sys.modules['__main__'], self.uiclass, self._import_pyui())
    Jenže bohužel to nefunguje jak bych si představoval, zjevně sys.modules['__main__'] odkazuje na jmenný prostor v modulu pyuic, né ve skriptu kam jsem pyuic importoval (i když jsem zkusil použít volání stylem "from pyuic import uiload"). Napadá vás jak toto řešit?

    Poslední otázku bych měl ohledně zjišťování jména vygenerované UI třídy. V současnosti to v metodě _get_classname řeším tak, že prostě parsuju soubor, který pyuic (ten původní Cčkový pyuic z PyQT, ne můj pyuic.py ;-)) vygeneroval. Nepřijde mi to ale jako zrovna moc dobré řešení, nešlo by nějak zjistit jméno té třídy přímo z už importovaného modulu? Mohl bych se třeba dotázat pomocí funkce dir() na vše co je obsaženo ve jmenném prostoru modulu, který jsem naimportoval pomocí mod = __import__(self.pyuimod), jenže tam je i obrovská hromada PyQT metod, takže mi takové řešení nepřijde moc dobře realizovatelné. Máte někdo nějaký nápad?

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    29.3.2006 20:19 Jan Kundrát (jkt) | skóre: 27 | blog: jkt | Praha - Bohnice
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    • Chybi tam jakakoli dokumentace
    • Co ma delat _import_pyui()? Ten for se mi zda nejakej divnej...
    • IMHO by jmena jako PyUI_mod_list nebo pyui_mod_list byly pythonoidnejsi nez pyuimod_list...
    • os.utime(filename, None) by se dalo pouzit misto carovani s modulem time
    Mikos avatar 29.3.2006 21:21 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Díky moc za reakci. K jednotlivým bodům:
    • Dokumentaci dodělám, nějak sem na ní uplně zapomněl ;-)
    • metoda _import_pyui() importuje modul s tou UI třídou (vygenerovaný pomocí klasického pyuic) a v té následné for smyčce je získán odkaz přímo na onu UI třídu v tom modulu (a ten pak ta metoda vrací). Inspiroval jsem se v referenční příručce k Pythonu, konkrétně v 2.1 Built-in Functions (kde je k funkci __import__ uveden obdobný příklad).
    • Jak říkam začal jsem se Python učit teprve nedávno... jaký zápis jmen je tedy "pythonoidnější"? Jaká jsou pro to pravidla? Četl jsem i PEP 8 -- Style Guide for Python Code, tam byla zmiňována hromada způsobu notací (CamelCase, podtržítková, atd.), ale žádná pokud si to pamatuji nebyla uvedena jako preferovaná...
    • Kdybych to udělal takto, tak sice nemusim importovat modul time, ale neměl bych na 100% zaručeno, že budou ty dva soubory mít stejný čas modifikace. Nebo se pletu?
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    29.3.2006 21:44 Jan Kundrát (jkt) | skóre: 27 | blog: jkt | Praha - Bohnice
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    metoda _import_pyui() importuje modul s tou UI třídou (vygenerovaný pomocí klasického pyuic) a v té následné for smyčce je získán odkaz přímo na onu UI třídu v tom modulu (a ten pak ta metoda vrací). Inspiroval jsem se v referenční příručce k Pythonu, konkrétně v 2.1 Built-in Functions (kde je k funkci __import__ uveden obdobný příklad).
    Njn, evidentne jsem tedka vecer moc retardovanej. Stejne to nechapu :).
    Jak říkam začal jsem se Python učit teprve nedávno... jaký zápis jmen je tedy "pythonoidnější"? Jaká jsou pro to pravidla? Četl jsem i PEP 8 -- Style Guide for Python Code, tam byla zmiňována hromada způsobu notací (CamelCase, podtržítková, atd.), ale žádná pokud si to pamatuji nebyla uvedena jako preferovaná...
    No... :)

    "Global Variable Names [...] The conventions are about the same as those for functions"

    "Function Names
    Function names should be lowercase, with words separated by underscores as necessary to improve readability.
    mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.

    "Method Names and Instance Variables - Use the function naming rules: lowercase with words separated by underscores as necessary to improve readability."

    Cili imho pouzivat_maly_pismena_s_podtrzitkama.

    Kdybych to udělal takto, tak sice nemusim importovat modul time, ale neměl bych na 100% zaručeno, že budou ty dva soubory mít stejný čas modifikace. Nebo se pletu?
    Nepletes. A nestaci ti, aby byl ten PyUI novejsi nez .ui?
    Mikos avatar 29.3.2006 21:22 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Jinak ještě k těm otázkám co jsem ve svém blogpostu položil - netušíte na ně aspoň nějakou odpověď? Aspoň na některou z nich :-)
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    29.3.2006 21:49 Jan Kundrát (jkt) | skóre: 27 | blog: jkt | Praha - Bohnice
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Ad ten trik s tou tridou, zkus si vygooglit ukazku, kterak resit v Pythonu konstanty - pouzivaj na to modul, kterej nejakym zpusobem (kterej si nepamatuju) zaridi import do namespacu "nadrazenyho modulu" nebo tak neco (a potom zakazou modifikaci vlastnosti ty tridy, co to implementuje). Nicmene nerucim za vhodnost pro tvuj problem.
    Jiří P. avatar 30.3.2006 08:38 Jiří P. | skóre: 24 | blog: programování
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT

    a co takhle pouzit ihooks a umoznit tak "primy" import ui souboru, jako by to byl .py soubor? Funguje tak treba kid. To by bylo elegantnejsi nez prezentovany zpusob.

    In a world without fences and walls, who needs Gates and Windows?
    30.3.2006 10:02 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    já vám nevím. Tak nějak mi to přijde jako drbání se pravou rukou na levé půlce zadku. Proč si to nezjednodušit a ve volném čase si nezaskočit do Hargova že-bírkového domu? Navíc dole uvedené řešení funguje i tam, kde není uic, potažmo pyuic. Na druhou stranu: kdo jsem, že upírám talentovanému jedinci právo vymýšlet novou klikovou hřídel?! ;)
    from qt import *
    from qtui import *
    import sys
    
    
    class FasaOknoBezUIC(QMainWindow):
    
        def __init__(self):
            QMainWindow.__init__(self)
            self.win = QWidgetFactory.create("form1.ui")
    
        def show(self):
            self.win.show()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = FasaOknoBezUIC()
        app.setMainWidget(w)
        app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
        w.show()
        ret = app.exec_loop()
        sys.exit(ret)
    
    Kuolema Kaikille (Paitsi Meille).
    30.3.2006 10:04 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    ano, jak už všichni správně tušíte, jsem idiot, který nepozorně čte. Na řešení otázky pracuji.
    Kuolema Kaikille (Paitsi Meille).
    30.3.2006 10:44 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    ták. a do třetice všeho zlého. Fungující práce se signály a sloty:
    from qt import *
    from qtui import *
    import sys
    
    
    class FasaOknoBezUIC(QMainWindow):
    
        def __init__(self):
            QMainWindow.__init__(self)
            self.win = QWidgetFactory.create("form1.ui")
            self.pushButton1 = self.win.child('pushButton1')
            self.connect(self.pushButton1, SIGNAL("clicked()"), self.pushButton1_clicked)
    
        def pushButton1_clicked(self):
            print 'clicked'
    
        def show(self):
            self.win.show()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = FasaOknoBezUIC()
        app.setMainWidget(w)
        app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
        w.show()
        ret = app.exec_loop()
        sys.exit(ret)
    
    Kuolema Kaikille (Paitsi Meille).
    Mikos avatar 30.3.2006 21:31 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Díky, hned to jdu zkusit :-) Zkoušel jsem ovšem předtím něco podobného, jen s tím že jsem si tam nedefinoval widgety jako např. u vás self.pushButton1 = self.win.child('pushButton1'), a to právě nefungovalo. Pokud to tohle řeší, můžu se přeptat na magii která za tím stojí? ;-) Já že s tou metodou child() jsem se nikde nikdy zatím nesetkal...
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    Mikos avatar 30.3.2006 21:37 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Hmm, tak nic, tak to nevyzkouším :-(

    V okamžiku kdy volám app.setMainWidget(w), tak schytám SIGSEGV a s Pythonem je ámen :-/ Nicméně to samé nyní dělá ten můj předchozí pokus (u kterého sice nefungovalo propojení signálů a slotů, ale aspoň se zobrazilo UI ;-)), takže bych řekl že je něco shnilého ve státě Dánském, respektive v mém systému :-) Zajímalo by mě, jestli s tím má co do dočinění upgrade na PyQT 3.16...
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    Mikos avatar 30.3.2006 21:46 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Tak sem to dohledal trochu přesněji - ten SIGSEGV je vyvolaný vždy při pokusu o QWidgetFactory.create("form.ui").
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    Mikos avatar 30.3.2006 22:05 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Další info :-) Zkoušel jsem gdb, ale vzhledem k tomu že mám vše zkompilováno bez debugging symbolů, tak jsem nějaký užitečný výsledek ani moc nečekal. Nicméně přesto tu něco je:
    (no debugging symbols found)
    ... nekonečná řada dalších stejných zpráv ;-) ..
    (no debugging symbols found)
    
    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread -1211967808 (LWP 19040)]
    0xb7f92531 in initsip () from /usr/lib/python2.4/site-packages/sip.so
    Což vyvolává podezření, že za to může SIP. Ostatně ten jsem upgradoval ve stejné době jako PyQT (na verzi 4.4)... tak, teď co dál ;-)
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    31.3.2006 08:59 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    tezko rici v cem je ryze... mam tu ted
    pvanek@pvanek:~> rpm -qa python-qt
    python-qt-3.5.1-5
    pvanek@pvanek:~> sip -V
    4.2.1 (4.2.1-297)
    a vsechno jede velice mazane a bez padu. Jeste to o vikendu mozna vyzkousim na ~x86 gentoo. Ale co tak google tvrdi, tak tyhle sip.so pady se obcas obejvily a zase zahadne zmizely
    Kuolema Kaikille (Paitsi Meille).
    31.3.2006 09:07 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    co se child() metody tyce, je soucasti tridy QObject.

    Drobna oklika: pri psani cehokoli v PyQt je k nezaplaceni dokumentace ke Qt. Da se totiz pouzit vicemene 1:1, pokud tedy vyhazis vsechny mozny *, &, dynamic_cast, const atd. Proste kdyz vynechas sprosta slova C++.

    Tohleto carovani s child() a QWidgetFactory je uz podle meho vyssi divci a spis kod zneprehledni. Radeji si to vzdycky pyuicnu do py.
    Kuolema Kaikille (Paitsi Meille).
    Mikos avatar 31.3.2006 18:14 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    No tak vidíš, tak v tom případě je ten můj modul pyuic použitelný dobře ;-)

    Nicméně netušíš jak naimportovat tu vytvořenou UI třídu do nadřazeného modulu? Myslím to co popisuju v té mé otázce v blogpostu... tu mojí metodu setclass().
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    Mikos avatar 31.3.2006 18:16 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Automatické generování UI v PyQT
    Jinak ještě díky za info, já dokumentaci ke Qt používam, ale jak říkam s Pythonem a PyQt sem začal teprve nedávno, takže mam ještě dost mezer...
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!

    Založit nové vláknoNahoru

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