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í
×
    včera 19:11 | Nová verze

    Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.4. Představení novinek také na YouTube. Bun byl přepsán z programovacího jazyka Zig do Rustu. Pomocí Claude Fable 5.

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Nová verze

    Vývojáři KDE na Mastodonu oznámili vydání balíku aplikací KDE Gear 26.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | IT novinky

    Společnost PINE64 kvůli nedostatku a vysokým cenám DRAM a eMMC dočasně pozastavuje výrobu linuxových zařízení. Výroba zařízení jako PineTime, PineVoice a Pinecil pokračuje.

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

    Společnost Stripe se dohodla na akvizici společnosti OpenRouter. Za 7,5 miliardy dolarů.

    Ladislav Hagara | Komentářů: 0
    včera 01:33 | Nová verze

    Byla vydána nová verze 1.27 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    19.8. 16:00 | Pozvánky

    V pátek 28. srpna se v Praze uskuteční již osmý Mobile Linux Hackday. Jako obvykle se potkáme v pražské pobočce SUSE v Karlíně na Křižíkově, takže kromě mobilního Linuxu je to tentokrát i příležitost přijít se podívat na nově zrekonstruované kanceláře. Začínáme v 10:00, ale dorazit můžete samozřejmě kdykoliv v průběhu dne. Setkáním vás provede David Heidelberg, vývojář GPU ovladačů v Mesa 3D a jeden z hlavních lidí české komunity kolem … více »

    lkocman | Komentářů: 0
    19.8. 14:11 | IT novinky

    Představen byl Raspberry Pi Compute Module 5 Programming Jig. Jedná se o zařízení umožňující připravit Compute Module 5 do plně funkčního stavu bez nutnosti použití dalších vstupně / výstupních desek. Podporuje automatizaci pomocí nástroje rpi-sb-provisioner. Podrobnosti v dokumentaci.

    Ladislav Hagara | Komentářů: 1
    19.8. 05:55 | IT novinky

    Hackeři ve Francii ukradli data více než půl milionu daňových poplatníků. Je to jeden z největších hackerských útoků v dějinách země. O útoku z konce června informovala až teď daňová správa. Teprve od pondělí dotčeným občanům zasílá e-maily s instrukcemi, jak postupovat dál. Hackeři se sice nedostanou k penězům dotyčných, hrozí ale věrohodné podvody. Hackeři získali třeba celá jména, údaje o rodinných příslušnících nebo také údaje o

    … více »
    Ladislav Hagara | Komentářů: 19
    19.8. 04:44 | IT novinky

    Společnost Framework představila nový Framework Laptop 12 s Intel Core Series 3, Thunderbolt 4, Wi-Fi 7, volitelnou čtečkou otisků prstů a podsvícenou klávesnicí s open-source firmwarem ZMK. Objednat lze s předinstalovanou Fedorou 44 KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    18.8. 16:44 | Nová verze

    Byl vydán Mozilla Firefox 154.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 154 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (30%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2448 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: PySide2 mapToGlobal nebo mapToPatent

    4.12.2023 15:46 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
    PySide2 mapToGlobal nebo mapToPatent
    Přečteno: 939×
    Zdravím ...

    Tři dny a tři noci :-) se motám kolem problému, jak určit polohu widgetu na obrazovce. Google mi moc nepomáhá a chatGPT odpověděl dobře, ale jeho odpověď se vztahovala na jim uvedený příklad:
    from PySide2.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
    
    class MyWidget(QWidget):
        def __init__(self):
            super().__init__()
    
            self.init_ui()
    
        def init_ui(self):
            layout = QVBoxLayout()
    
            button = QPushButton('Můj tlačítko', self)
            button.clicked.connect(self.on_button_click)
    
            layout.addWidget(button)
            self.setLayout(layout)
    
        def on_button_click(self):
            # Získání globálních souřadnic tlačítka
            global_pos = self.mapToGlobal(self.sender().pos())
            print('Globální souřadnice tlačítka:', global_pos.x(), global_pos.y())
    
    if __name__ == '__main__':
        app = QApplication([])
        widget = MyWidget()
        widget.show()
        app.exec_()

    Jakmile Widget zaměním za okno a oknu nastavím centralWidget, mapToGlobal vrací polohu asi centralWidgetu: (měřeno KRulerem)
    ...
    ...
            self.centralW = QWidget()
            layout = QVBoxLayout()
    
            button = QPushButton('Můj tlačítko', self)
            button.clicked.connect(self.on_button_click)
    
            layout.addWidget(button)
            self.centralW.setLayout(layout)
            self.setCentralWidget(self.centralW)
    
        def on_button_click(self):
            # Získání globálních souřadnic tlačítka
            s = self.sender().pos()
            print(f"sender {s}")
            cw = self.centralW.pos()
            print(f"central {cw}")
    
            global_pos = self.mapToGlobal( self.sender().pos())
            print('Globální souřadnice tlačítka:', global_pos.x(), global_pos.y())
    ...
    ...
    

    Opravdový přiklad, kde mapTo... chci použít, je trochu složitější, a jediný způsob určení polohy, který jsem vyšpekuloval je:
            w = self.ui.qpb_DoSearch
            pos = w.pos()
            print(pos)
    
            while p := w.parentWidget():
                pos = pos + p.pos()
                 print(p, p.pos())
                 w = p
            print(f"pos: {pos}")
    
    
    tedy sečíst polohu prvku s polohou všech nadřazených prvků. Výsledek je SKORO přesný. Jsou tu ale dvě věci, které mi zatím brání toto použít:

    1) řešení mi připadá kostrbaté

    2) ta nepřesnost je ASI způsobená marginy prvků (to nevím jistě) a v případě nějakých šílených marginů mi tento způsob připadá nevhodný.

    Možná jdu na problém úplně špatně, cílem je zobrazit krátké varování nad widgetem, že už není další nález hledaného řetězce. Mám to vyřešené přes QDialog bez dekorace, ten QDialog je zvlášť třída, a aby se zobrazil na správném místě, musím znát pozici widgetu. Zatím jsem to vymyslel takto, ale jak píšu, možná to není nejlepší způsob..

    Jaké jsou vaše nápady? Rád si počtu rady chytřejších..

    Děkuji

    M

    Řešení dotazu:


    Odpovědi

    Řešení 1× (Milan Uhrák (tazatel))
    4.12.2023 17:52 darebak
    Rozbalit Rozbalit vše Re: PySide2 mapToGlobal nebo mapToPatent
    QDialog d(widget.parentWidget()) d.move(widget.pos())

    alebo bez parent widgetu

    QDialog d d.move(widget.mapToGlobal(QPoint(0, 0)))

    https://doc.qt.io/qt-6/application-windows.html#window-geometry
    5.12.2023 18:13 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
    Rozbalit Rozbalit vše Re: PySide2 mapToGlobal nebo mapToPatent
    Nejprve jsem tvou odpověď jako moc nechápal. Přece jen Qt znám jen povrchně, a z tvého náznaku jsem noc nepobral. Ale nedalo mi to, a dnes jsem zkoušel to tvé kouzlo přizpůsobit Pythonu a hrát si s QPoint(0, 0) jako argumentem...

    Asi napotřetí jsem se trefil :-) a ... fakt to takto funguje. GPT mi radil něco úplně jiného, ale to fungovalo jen za určitých podmínek. Toto tvé použití jsem neznal, a připadalo mi trochu ujeté, no ale fakt funguje..

    Takže děkuji za popostrčení.

    M.

    Založit nové vláknoNahoru

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

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