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 21:44 | IT novinky

    Akční adventura State of Mind je na portále GOG.com zdarma, akce trvá do 10. září.

    |🇵🇸 | Komentářů: 0
    včera 13:22 | IT novinky

    Na Kickstarteru běží kampaň na podporu malého robotický psa Petoi Quaddle. Postaven je na ESP32-S3. V několika variantách. S řadou senzorů. Programovat lze pomocí Pythonu, C++ nebo i vizuálních bloků. Zkoušet a trénovat lze v simulátoru.

    Ladislav Hagara | Komentářů: 1
    6.9. 22:11 | Pozvánky

    Dětem začala škola a nedobrovolně se tak musí vzdělávat. Avšak pro dospělé, kteří se chtějí vzdělávat nebo naopak se o vědomosti podělit, je tu Virtuální Bastlírna - jako každý měsíc si můžete online a zdarma nezávazně popovídat o vědě a technice nejen s bastlíři, ale i s vývojáři, vědci nebo profesory. A čemu se strahováci budou věnovat? Blíží se KiCAD 11 s nespočtem novinek, z nichž zde musí zmínit alespoň možnost kótování a závislostí z

    … více »
    bkralik | Komentářů: 1
    6.9. 19:33 | Komunita

    Asahi Linux, tj. Linux pro Apple Silicon, oficiálně podporuje čipy M3 (M3, M3 Pro a M3 Max).

    Ladislav Hagara | Komentářů: 5
    6.9. 15:44 | IT novinky Ladislav Hagara | Komentářů: 1
    6.9. 15:00 | IT novinky

    Server SiFive BigSky SF-2U870 2U je založený na jádře SiFive P870-D, zatím je naintegrovaných 32 jader 256 GB RAM 2 GHz, škálovat lze do 256 jader na čip. O něco podrobnější popis serveru v článku SiFive BigSky Ships the First RISC-V Server. Is the GPU Head Node the Prize? na futurumgroup.com. Asi ani tento čip nebude na úrovni nejlepších 64-bit ARMů a AMD Zenů, ale splňuje RVA23 specifikaci a je podporovaný Ubuntu 26.04 LTS a RHEL 10. V článku je

    … více »
    Pavel Píša | Komentářů: 1
    6.9. 00:11 | IT novinky

    Na YouTube lze zhlédnout nový celovečerní dokumentární film The Story of VS Code | Official Documentary věnovaný Visual Studio Code.

    Ladislav Hagara | Komentářů: 19
    4.9. 23:49 | Zajímavý článek

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 26.08.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 1
    4.9. 17:33 | Zajímavý článek

    Bylo vydáno nové číslo hackerského magazínu tmp.0ut: Volume 5.

    Ladislav Hagara | Komentářů: 1
    4.9. 01:44 | Nová verze

    Byla vydána nová stabilní verze 8.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 152. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (4%)
     (21%)
     (29%)
     (7%)
     (6%)
     (2%)
     (14%)
     (21%)
    Celkem 2610 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: 997×
    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.