Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как получить позицию компонента PyQt/PySide [RSS Feed]

#1 Май 13, 2016 15:04:09

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Как получить позицию компонента PyQt/PySide

Всех приветствую. Вроде легкая задачка, однако, пока не смог решить.
Имеется виджет на котором расположен компонент - кнопка. Нужно получить координаты верхней левой точки кнопки относительно 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()))
Все равно по нулям, я немного не понял эту парадигму, кто понял и может объяснить ?

Офлайн

#2 Май 13, 2016 15:43:40

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Как получить позицию компонента PyQt/PySide

высчитать?

Офлайн

#3 Май 14, 2016 10:46:07

vic57
Зарегистрирован: 2015-07-07
Сообщения: 908
Репутация: +  127  -
Профиль   Отправить e-mail  

Как получить позицию компонента PyQt/PySide

#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_())

Отредактировано vic57 (Май 14, 2016 10:49:45)

Офлайн

#4 Май 14, 2016 12:23:30

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Как получить позицию компонента PyQt/PySide

vic57
Отличный пример, который демонстрирует работу. Благодарю

Офлайн

  • Начало
  • » GUI
  • » Как получить позицию компонента PyQt/PySide[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version