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