2017-04-24 24 views
0

私は、メインウィンドウクラスに挿入されたSlides WidgetクラスのsetCentralWidgetがボタンの機能(つまり、新しいウィジェットウィンドウを開く)を引き起こすことを、私のプロジェクトから推測しました。メインウィンドウはまったく動作しません。PyQt:setCentralWidgetがQPushButton関数と衝突する

私がsetCentralWidgetを削除した場合、ボタンは正常に動作するため、機能を損なうことなく、どのような方法を使用する必要がありますか?スライドウィジェットクラスを呼び出す別の形式を使用する必要がありますか?

いつものように助けてください!ありがとう!

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_()) 

答えて

1

問題は、最初の場所のボタンと、この上はCentralWidgetを配置しているため、ソリューション、すなわちスライドで、CentralWidgetにボタンを配置することで生じます。

あなたは変更する必要があります。

def __init__(self, image_files, parent=None): 
    super(MainWindow, self).__init__() 
    self.setupUi(self) 
    self.slides_widget = Slides(image_files, self) 

へ:

def __init__(self, image_files, parent=None): 
    super(MainWindow, self).__init__() 
    self.slides_widget = Slides(image_files, self) 
    self.setupUi(self) 

self.groupBox = QtGui.QGroupBox(MainWindow) 

へ:

self.groupBox = QtGui.QGroupBox(MainWindow.slides_widget) 

共同mpleteコード:

from PyQt4 import QtCore, QtGui 
import sys 


class MainWindow(QtGui.QMainWindow): 
    def __init__(self, image_files, parent=None): 
     super(MainWindow, self).__init__() 
     self.slides_widget = Slides(image_files, self) 
     self.setupUi(self) 

    def setupUi(self, MainWindow): 

     MainWindow.resize(1278, 688) 
     #MainWindow.setStyleSheet(self.styledata) 

     self.groupBox = QtGui.QGroupBox(MainWindow.slides_widget) 
     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(self.DescWindow) 
     self.setCentralWidget(self.slides_widget) 

     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_()) 
+0

私はその卑劣な 'self.setCentralWidget(self.slides_widgetが)'だけプッシュボタンの下ハハ、私はそれが仕事作っ見つけなければなりませんでした!乾杯! しかし、私は、MainWindow内で呼び出されるSlidesのフレームを置くと、画像が重なってしまうことに気付きました...フレームをフレームの後ろにどのように呼び出すかについてのアイデアはありますか? 'self.SlidesWidget = QtGui.QListWidget(MainWindow.slides_widget) self.SlidesWidget.setFrameShape(QtGui.QFrame.Box) self.SlidesWidget.setFrameShadow(QtGui.QFrame.Raised)'は私のためのトリックをしませんでした。 – madLad

+0

レイアウトを使ってウィジェットを見つけることをお勧めします。 – eyllanesc

+0

私は背景色のheheheで透明の使用でそれを考え出しました。ありがとう! – madLad

関連する問題