2017-09-28 8 views
-2

スライドショーのように動作するアプリケーションがあります:クリックすると背景の画像が変更されるボタンがあります。また、前の画像に戻るのに役立つ2番目のボタンがあります。問題は、ショーの終わりに最初のボタンが別の機能を取得することですが、それ以降は、backボタンをクリックすると機能を元の状態に戻すことができません。私のコードは多少このようになりますボタン接続を別の機能に変更する

、私はこれは私の問題が明らかに願っています:

class SecondWindow(TemplateBaseClass): 
    def back(self): 
     self.first.n = self.first.n-2 
     self.hide() 
     self.first.show() 
     self.first.nextPicture() 

    def __init__(self):   
     TemplateBaseClass.__init__(self) 
     self.ui = WindowTemplate() 
     self.ui.setupUi(self) 
     self.first = MainWindow(self) 
     self.first.showFullScreen() 
     self.ui.pushButton.clicked.connect(lambda x:self.back()) 


class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 

    def showSecond(self): 
      #QTimer.singleShot(25, MainWindow) 
      self.second.showFullScreen() 
      self.hide() 

    def back(self): 
     if self.n >= 2: 
      self.n = self.n-2 
     self.notBack = False 
     self.nextPicture() 
     # I tried in several places like here, but it does not work 
     self.ui.end_button.clicked.connect(lambda x:self.nextPicture()) 

    def nextPicture(self): 
     print(self.n) 
     if self.n == 0: 
      self.ui.bg_widget.setStyleSheet("background-image: url(:/ux/img0.png);\nbackground-repeat:no-repeat;") 
     elif self.n ==1 : 
      self.ui.bg_widget.setStyleSheet("background-image: url(:/ux/img1.png);\nbackground-repeat:no-repeat;") 
     elif self.n == 2: 
      self.ui.bg_widget.setStyleSheet("background-image: url(:/ux/img2.png);\nbackground-repeat:no-repeat;") 
      if self.notBack: 
       self.ui.end_button.clicked.connect(lambda x:self.showSecond()) 
      else: 
       self.ui.end_button.clicked.connect(lambda x:self.nextPicture()) 
     self.n +=1 
     self.notBack = True 

    def __init__(self, second): 
     QtGui.QMainWindow.__init__(self) 
     Ui_MainWindow.__init__(self) 
     self.second = second 
     self.setWindowTitle('pyqtgraph example: Qt Designer') 
     self.ui=uic.loadUi(uiFile, self) 
     self.setupUi(self) 
     self.setWindowFlags(QtCore.Qt.CustomizeWindowHint) 
     self.showFullScreen() 
     self.n = 1 
     self.notBack = True 
     self.ui.end_button.clicked.connect(lambda x:self.nextPicture()) 
     self.ui.backButton.clicked.connect(lambda x:self.back()) 

答えて

0

シンプルdisconnect()はこの問題を解決:

def back(self): 
    if self.n >= 2: 
     self.n = self.n-2 
    self.notBack = False 
    self.nextPicture() 
    self.ui.end_button.disconnect() 
    self.ui.end_button.clicked.connect(lambda x:self.nextPicture()) 
関連する問題