Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чёрная дыра в PySide
Форум на CrossPlatform.RU > Разработка > Интерпретируемые языки
Litkevich Yuriy
Никак не могу победить одно место в программе, такое ощущение, что там где-то врата в четвёртое измерение.

Вот код:
class Qt5WayButton(QWidget):
    def __init__(self, parent = None):
        QWidget.__init__(self, parent)
        sp = QSizePolicy()
        sp.setHeightForWidth(True)
        self.setSizePolicy(sp)

        grid = QGridLayout(self)
        grid.setMargin(0)
        grid.setSpacing(0)

        self.m_upButton = NavigationButton(self)
        self.m_downButton = NavigationButton(self)
        self.m_leftButton = NavigationButton(self)
        self.m_rightButton = NavigationButton(self)
        self.m_centerButton = NavigationButton(self)

        grid.addWidget(self.m_upButton, 0, 0, 1, 2)
        grid.addWidget(self.m_downButton, 1, 0, 1, 2)
        grid.addWidget(self.m_leftButton, 0, 0, 2, 1)
        grid.addWidget(self.m_rightButton, 0, 1, 2, 1)
        grid.addWidget(self.m_centerButton, 0, 0, 2, 2)

        self.m_rendererBase = QtSvgPixmapCache(self)

# ...

    def resizeEvent(self, event):
        print "Qt5WayButton.resizeEvent"
        # update masks
        self.m_upButton.updateMask()
        self.m_downButton.updateMask()
        self.m_leftButton.updateMask()
        self.m_rightButton.updateMask()
        self.m_centerButton.updateMask()
        QWidget.resizeEvent(self, event)
    
    def paintEvent(self, event):
        print "Qt5WayButton.paintEvent, before", event
        QWidget.paintEvent(self, event)
        print "Qt5WayButton.paintEvent, after", event
        painter = QPainter(self)
        self.m_rendererBase.render(painter, self.m_centerButton.geometry())
        self.m_upButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_upButton", self.m_upButton
        self.m_downButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_downButton", self.m_downButton
        self.m_leftButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_leftButton", self.m_leftButton
        self.m_rightButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_rightButton", self.m_rightButton
        self.m_centerButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_centerButton", self.m_centerButton
а в консоль печатается:
__init__ in src
__init__ in src\qt5waybutton
__init__ in src\common
__init__ in skin
Qt5WayButton.resizeEvent
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6940>
Qt5WayButton.paintEvent, after <PySide.QtGui.QPaintEvent object at 0x017F6940>
Qt5WayButton.paintEvent, m_upButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0A20>
Qt5WayButton.paintEvent, m_downButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0AE0>
Qt5WayButton.paintEvent, m_leftButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0BA0>
Qt5WayButton.paintEvent, m_rightButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0C60>
Qt5WayButton.paintEvent, m_centerButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0D20>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6960>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6980>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6940>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F68A0>
Т.е. в первый раз управление проходит строчку
QWidget.paintEvent(self, event)
но во все последующие - нет. Однако как попадает в событие рисования опять (не вешается) я не понимаю.
событие изменения размера не происходит ни когда (кроме первого раза), но окошко растягивается, другие виджеты работают нормально.
Litkevich Yuriy
в версии PySide 1.0.0 такого не наблюдается.

Однако Питон странный зверь, прога не работает, но в тоже время работает :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.