setPixmap на QLabel ничего не делает при повторном вызове в качестве дочернего виджета - PullRequest
0 голосов
/ 11 июня 2019

Следующие два класса очень похожи, но их поведение не одинаково. Второй работает очевидным образом: каждое нажатие кнопки представляет новое изображение в слайд-шоу. Но первое не делает. Вместо этого поведение странно. При первом нажатии кнопки «Далее» отображается новое изображение. Последующие нажатия кнопок не выполняются, за исключением случаев, когда вы перемещаете или изменяете размер окна. Может кто-нибудь объяснить мне, почему ???

class BrokenSlideWidget(QWidget):
    def __init__(self, images):
        super().__init__()

        # The code that is different between two
        # #######################################
        self.layout = QHBoxLayout()
        self.setLayout(self.layout)
        # #######################################

        self.pixmaps = [QPixmap(img) for img in images]
        self.index = 0
        self.page_label = QLabel()
        self.page_label.setPixmap(self.pixmaps[self.index])
        self.next_button = QPushButton(">")
        self.next_button.clicked.connect(self.next)
        self.previous_button = QPushButton("<")
        self.previous_button.clicked.connect(self.previous)
        self.layout.addWidget(self.previous_button)
        self.layout.addWidget(self.page_label)
        self.layout.addWidget(self.next_button)
        self.show()

    def previous(self):
        if self.index > 0:
            self.index = self.index - 1
        self.page_label.setPixmap(self.pixmaps[self.index])

    def next(self):
        self.index = self.index + 1
        try:
            self.page_label.setPixmap(self.pixmaps[self.index])
        except IndexError:
            # Do handling

и

class WorkingSlideWidget(QWidget):
    def __init__(self, images):
        super().__init__()

        # The code that is different between the two
        # ##########################################
        self.master_layout = QVBoxLayout()
        self.layout = QHBoxLayout()
        self.master_layout.addLayout(self.layout)
        self.setLayout(self.master_layout)
        # ##########################################

        self.pixmaps = [QPixmap(img) for img in images]
        self.index = 0
        self.page_label = QLabel()
        self.page_label.setPixmap(self.pixmaps[self.index])
        self.next_button = QPushButton(">")
        self.next_button.clicked.connect(self.next)
        self.previous_button = QPushButton("<")
        self.previous_button.clicked.connect(self.previous)
        self.layout.addWidget(self.previous_button)
        self.layout.addWidget(self.page_label)
        self.layout.addWidget(self.next_button)
        self.show()

    def previous(self):
        if self.index > 0:
            self.index = self.index - 1
        self.page_label.setPixmap(self.pixmaps[self.index])

    def next(self):
        self.index = self.index + 1
        try:
            self.page_label.setPixmap(self.pixmaps[self.index])
        except IndexError:
            # Do handling

Второй класс работает. Первый сломан. Что происходит?

...