TransWikia.com

Координаты окна в PyQt5

Stack Overflow на русском Asked by PrinterOMG on September 27, 2020

Подксажите как получить координаты окна в PyQt5 или хоть как-нибудь определить его положение на экране. Мне нужно чтобы новое окно открывалось на месте предыдуещго, может есть какой-то другой способ. Пробовал через положение курсора при нажатии кнопки, но это совсем дичь получается. Спасибо!

One Answer

Для получить координат окна и определения его положение на экране хорошо подходит frameGeometry : const QRect - геометрия виджета относительно его родителя, включая любую рамку окна.

Другое дело когда вы собираетесь отслеживать местоположение окна на экране.

Попробуйте пример, измените его размер, а также попробуйте перетащить окно не изменяя его размер.

import sys
from PyQt5.QtCore import QTimeLine, QEvent
from PyQt5.QtWidgets import QApplication, QWidget, QLabel


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        self.resize(600, 600)
        self.w = self.size().width()
        print(self.w)

        self.label = QLabel('<h2 style="color: blue;">Hello PyQt5</h2>', self)
        self.label.move(-100, 100)

        self.timeline = QTimeLine(6000*2, self)        
        self.timeline.setFrameRange(0, self.w+100)     

        self.timeline.frameChanged.connect(self.set_frame_func)
        self.timeline.setLoopCount(0)                          
        self.timeline.start()

        self.frame_geometry = None                                           # !!!

    def set_frame_func(self, frame):
        self.label.move(-100+frame, 100)
       
        if self.frame_geometry != self.frameGeometry():                      # !!!
            self.frame_geometry = self.frameGeometry()
            print(f' set_frame_func: -> {self.frame_geometry}')
        
    def resizeEvent(self, event):  
        super(Demo, self).resizeEvent(event)
        self.w = self.size().width()
        self.timeline.setFrameRange(0, self.w+100)
        duration = self.w * 20
        self.timeline.setDuration(duration)
        
        self.frame_geometry = self.frameGeometry()                           # !!!
        print(f'+++ releaseEvent -> {self.frame_geometry}')
      

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

введите сюда описание изображения

Answered by S. Nick on September 27, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP