Also habe ich aus meinem Projekt auf dieses Problem geschlossen, dass das setCentralWidget aus der Slides Widget Klasse in die Hauptfensterklasse injiziert die Funktion der Buttons (dh das Öffnen eines neuen Widgetfensters) auslöst Das Hauptfenster funktioniert überhaupt nicht.PyQt: setCentralWidget kollidiert mit der QPushButton Funktion
Wenn ich das SetCentralWidget entferne funktionieren die Tasten gut, ohne irgendwelche Funktionen zu beeinträchtigen, welchen Ansatz sollte ich dafür verwenden? Sollte ich eine andere Form des Aufrufs der Folien-Widget-Klasse verwenden?
Jede Hilfe wäre willkommen, wie immer! Vielen Dank!
from PyQt4 import QtCore, QtGui
import sys
from functools import partial
class MainWindow(QtGui.QMainWindow):
def __init__(self, image_files, parent=None):
super(MainWindow, self).__init__()
self.setupUi(self)
self.slides_widget = Slides(image_files, self)
#If you enable this down below, pushButton will not function
#and instead the slideshow will pop up and function correctly
#self.setCentralWidget(self.slides_widget)
def setupUi(self, MainWindow):
MainWindow.resize(1278, 688)
#MainWindow.setStyleSheet(self.styledata)
self.groupBox = QtGui.QGroupBox(MainWindow)
self.groupBox.setGeometry(QtCore.QRect(490, 220, 120, 371))
self.groupBox.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
self.groupBox.setFlat(False)
self.groupBox.setCheckable(False)
self.pushButton_Desc = QtGui.QPushButton(self.groupBox)
self.pushButton_Desc.setGeometry(QtCore.QRect(20, 30, 71, 61))
self.pushButton_Desc.clicked.connect(partial(self.DescWindow))
self.groupBox.raise_()
self.NewWindow = QtGui.QWidget()
def DescWindow(self):
self.NewWindow.show();
class Slides(QtGui.QWidget):
def __init__(self, image_files, parent=None):
super(Slides, self).__init__(parent)
self.image_files = image_files
self.label = QtGui.QLabel("", self)
self.label.setGeometry(65, 225, 423, 363)
#buttons to rewind and forward
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
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 = QtGui.QPixmap(file)
self.label.setPixmap(image)
#self.setWindowTitle("{} --> {}".format(str(self.step), file))
self.step += 1
image_files = ["images\slide1.jpg", "images\slide2.jpg", "images\slide3.jpg",
"images\slide4.jpg", "images\slide5.jpg"]
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
Form = MainWindow(image_files)
Form.show()
sys.exit(app.exec_())
Ich hatte diese hinterhältige 'self.setCentralWidget (self.slides_widget) finden' knapp unter dem Druckknopf haha Ich habe es arbeiten! Prost! Aber ich erkannte, dass, wenn ich einen Rahmen für meine Folien, die im MainWindow aufgerufen wird, legt es die Bilder überlappt ... Irgendeine Idee, wie ich den Rahmen HINTER den Bildern nennen? 'self.SlidesWidget = QtGui.QListWidget (MainWindow.slides_widget) self.SlidesWidget.setFrameShape (QtGui.QFrame.Box) self.SlidesWidget.setFrameShadow (QtGui.QFrame.Raised)' hat den Trick für mich nicht. – madLad
Ich empfehle Layouts zu verwenden, um Widgets zu finden. – eyllanesc
Ich habe es mit der Verwendung von Transparenz in der Hintergrundfarbe hehehe herausgefunden. Vielen Dank! – madLad