2017-08-03 51 views
1

我對PyQt5非常陌生,並且正在製作一個簡單的程序,用戶在第一次出現時可以選擇兩個按鈕,當他們按下一個按鈕時應該將它們帶到新的屏幕,當他們按下另一個時,它應該把它們帶到另一個屏幕。按下按鈕時我無法打開新的小部件。我試圖做到這一點的方式是通過創建一個創建窗口小部件的函數,並在用戶按下按鈕時運行此函數,但當前該窗口小部件不是由該函數創建的。如何在PyQt5中按下按鈕時創建新的小部件

這是我的代碼。

def StudentLog(): 
    class StudentLogin(QWidget): 
     def __init__(self): 
      super().__init__() 
      self.initUI() 

     def initUI(self): 
      self.setGeometry(300, 300, 300, 200) 
      self.setWindowTitle('Student log in screen')  
      self.show() 


class Login(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI()   

    def initUI(self): 

     QToolTip.setFont(QFont('SansSerif', 10))  
     self.setToolTip('Login screen') 
     btn = QPushButton('Student Login', self) 
     btn.setToolTip('This will log you in as a student') 
     btn.move(10, 50) 
     btn.clicked.connect(StudentLog) 

     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Log in screen')  
     self.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Login() 
    sys.exit(app.exec_()) 

回答

0

這裏的問題是,你只聲明你的函數StudentLog()內一類,然後你從來沒有創建這個類的一個實例。

我建議移動此功能的類Login裏面,去創造你可以很容易地調用也爲了創建這個實例的方法,而好處是,你可以通過使用self.保持新的widget的軌道:

class StudentLogin(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 
     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Student log in screen') 
     self.show() 


class Login(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 

     QToolTip.setFont(QFont('SansSerif', 10)) 
     self.setToolTip('Login screen') 
     btn = QPushButton('Student Login', self) 
     btn.setToolTip('This will log you in as a student') 
     btn.move(10, 50) 
     btn.clicked.connect(self.student_log) 

     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Log in screen') 
     self.show() 

    def student_log(self): 
     self.widget = StudentLogin() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Login() 
    sys.exit(app.exec_()) 
+0

你的方法似乎已經奏效,非常感謝你的幫助。 –

+0

@JoeMalley,很好,謝謝你的反饋! – PRMoureu

相關問題