Найти - Пользователи
Полная версия: Как получить позицию компонента PyQt/PySide
Начало » GUI » Как получить позицию компонента PyQt/PySide
1
Lestoroer
Всех приветствую. Вроде легкая задачка, однако, пока не смог решить.
Имеется виджет на котором расположен компонент - кнопка. Нужно получить координаты верхней левой точки кнопки относительно QWidget. Как я понял это осуществляется методом pos().
Вот код, и тут все работает:
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.window1()
    def window1 (self):
        self.setWindowTitle('Record')
        self.resize(339, 226)
        #Создаем кнопку
        btn = QPushButton('Нажать', self)
        #Размещаем кнопку на виджете
        btn.move(200,200)
        #Получаем QPoint(200,200)
        print(btn.pos())
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv) 
    window = Window() 
    window.show()
    sys.exit(app.exec_())
Но если добавить кнопку в контейнер и установить его методом setLayout, то при вызове этого метода pos() не возвращаются координаты, вернее возвращаются - но QPoint(0,0).
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.window1()
    def window1 (self):
        self.setWindowTitle('Record')
        self.resize(339, 226)
        #Создаем кнопку
        btn = QPushButton('Нажать', self)
        #Вкладываем ее в контейнер
        hbox = QHBoxLayout(self)
        hbox.addWidget(btn)
        self.setLayout(hbox)
        #Получаем QPoint(0,0)
        print(btn.pos())
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv) 
    window = Window() 
    window.show()
    sys.exit(app.exec_())
Я так понимаю идет возвращение точки в системе координат компонента, поэтому нужно преобразовать эти координаты в какие нам удобно -> либо в глобальные, либо в родительские. Пытаюсь это сделать с помощью этого:
#Получаем QPoint(0,0)
        print(btn.mapToParent(btn.pos()))
Все равно по нулям, я немного не понял эту парадигму, кто понял и может объяснить ?
vrabey
высчитать?
vic57
#coding:utf8
from PySide.QtGui import *
class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.window1()
    def window1 (self):
        self.setWindowTitle('Record')
        self.resize(339, 226)
        #Создаем кнопку
        self.btn = QPushButton(u'Нажать', self)
        #Вкладываем ее в контейнер
        hbox = QGridLayout(self)
        hbox.setContentsMargins(0,0,0,0)
        hbox.addWidget(self.btn)
        self.setLayout(hbox)
        print 'init',self.btn.pos()
        self.btn.clicked.connect(self.btn_click)
    def btn_click(self):
        print 'click',self.btn.pos()
        
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv) 
    w = Window()
    w.move(0,0)
    print 'move',w.btn.pos()
    w.show()
    print 'show',w.btn.pos()
    sys.exit(app.exec_())
Lestoroer
vic57
Отличный пример, который демонстрирует работу. Благодарю
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB