PyQt: QWidget slideshow images not showing up correctly in QMainWindow
我创建了两个类-从QtDesigner生成的QMainWindow和仅单独执行时完美运行的QWidget幻灯片。 我设法将小部件合并到MainWindow类中,并且当我单击"幻灯片"按钮时,它会执行良好的BUT,但图像不显示并出现此错误:
1 2 3 | line 61, in timerEvent if self.step >= len(self.image_files): TypeError: object of type 'MainWindow' has no len() |
这可能是一个小错误,但我仍然是PyQt的新手,而且我已经尝试摆弄它近一天了,哈哈。 一如既往,任何帮助将不胜感激!
这是完整的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | from PyQt4 import QtCore, QtGui import sys try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class MainWindow(QtGui.QMainWindow): #(self, parent=None) <- original code def __init__(self, image_files, parent=None): QtGui.QMainWindow.__init__(self, parent) self.setupUi(self) #Initialized Widget here self.slides_widget = Slides(self) self.setCentralWidget(self.slides_widget) def setupUi(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(1012, 532) self.tabWidget = QtGui.QTabWidget(Form) self.tabWidget.setGeometry(QtCore.QRect(470, 130, 451, 301)) self.tabWidget.setObjectName(_fromUtf8("tabWidget")) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): Form.setWindowTitle(_translate("Form","Form", None)) class Slides(QtGui.QWidget): def __init__(self, image_files, parent=None): QtGui.QWidget.__init__(self, parent) self.image_files = image_files self.label = QtGui.QLabel("", self) self.label.setGeometry(50, 150, 450, 350) #button self.button = QtGui.QPushButton(". . .", self) self.button.setGeometry(200, 100, 140, 30) self.button.clicked.connect(self.timerEvent) self.timer = QtCore.QBasicTimer() self.step = 0 self.delay = 3000 #ms sTitle ="DIT Erasmus Page : {} seconds" self.setWindowTitle(sTitle.format(self.delay/1000.0)) def timerEvent(self, e=None): if self.step >= len(self.image_files): self.timer.start(self.delay, self) self.step = 0 return self.timer.start(self.delay, self) file = self.image_files[self.step] image = QPixmap(file) self.label.setPixmap(image) self.setWindowTitle("{} --> {}".format(str(self.step), file)) self.step += 1 image_files = ["slide1.jpg","slide2.jpg","slide3.jpg","slide4.jpg"] if __name__ =="__main__": app = QtGui.QApplication(sys.argv) Form = MainWindow(image_files) ui = MainWindow(image_files) Form.show() sys.exit(app.exec_()) |
问题出在您在
1 | self.slides_widget = Slides(self) |
您将
1 2 | class Slides(QtGui.QWidget): def __init__(self, image_files, parent=None): |
只需使用:
1 | self.slides_widget = Slides(image_files, self) |
而是在您的
祝好运 :)