2017-09-28 51 views
-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())