2016-12-24 4 views
1

В Qt дизайнер, у меня есть пользовательский GraphicsView виджет, который я продвигаю в пользовательский класс под названием Вид:Дизайнер, созданный дизайнером PyQt, ссылается на объект верхнего уровня?

enter image description here

Обратите внимание, что его родитель HorizontalLayout. Соответствующий код из pyuic выглядит следующим образом:

class Ui_panelFill(object): 
    def setupUi(self, panelFill): 
     panelFill.setObjectName("panelFill") 
     panelFill.resize(1031, 702) 
     self.centralwidget = QtWidgets.QWidget(panelFill) 
     self.centralwidget.setObjectName("centralwidget") 
     self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget) 
     self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 20, 1001, 631)) 
     self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") 
     self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) 
     self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 
     self.horizontalLayout.setObjectName("horizontalLayout") 
     self.graphicsView = View(self.horizontalLayoutWidget) 
     self.graphicsView.setObjectName("graphicsView") 
     ... 

Внутренность программы, такие, как все важные переменные и методы, в классе верхнего уровня называется panelFill.

class panelFill(QMainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 
     uic.loadUi("panelFill.ui",self) 

     self.vertices=[[0,0],[0,120],[240,120],[240,0]] 
     ... 

Как я могу ссылаться на переменную вершин из метода класса View? Я надеялся на что-то вроде self.parent.vertices, но, увы, родитель не объект panelFill, это horizontalLayout. Есть ли что-то вроде self.superduper(). Vertices для получения атрибутов родительского объекта верхнего уровня вместо исходного родительского объекта?

ответ

1

На самом деле, родителем вашего View является horizontalLayoutWidget, что является QWidget - все виджеты должны иметь другой виджет как родительский.

Чтобы получить виджет верхнего уровня в иерархии, вы можете использовать метод виджета графического вида window(). Этот метод просто подходит к цепочке предков, используя parentWidget(), пока не найдет виджет без родителя, который по определению должен быть виджем верхнего уровня (т. Е. Вашим основным окном).

+0

Спасибо, я просто нашел это в другом подобном вопросе. Поэтому в представлении __init__ я делаю self.top = self.window(), затем делаю ссылки типа self.top.vertices –

 Смежные вопросы

  • Нет связанных вопросов^_^