2017-07-14 60 views
1

PythonPyQt4很新。
我想問"How to back to previous Window ?"
我有2個文件在這裏,文件 '登錄' 和 '註冊'返回到前窗

here file login.py

import sys 
from PyQt4.QtGui import QWidget, QPushButton, QLineEdit, QLabel, \ 
         QApplication, QGridLayout 

from signup import SignUp 


class Login(QWidget): 
    def __init__(self): 
     super(Login, self).__init__() 

     self.setWindowTitle("Login") 

     self.login_window() 

    def login_window(self): 
     self.login_layout = QGridLayout() 

     self.login_button = QPushButton("Login") 
     self.signup_button = QPushButton("Sign Up") 

     self.login_layout.addWidget(self.login_button, 2, 0) 
     self.login_layout.addWidget(self.signup_button, 2, 1) 

     self.signup_button.clicked.connect(self.signup_show) 

     self.setLayout(self.login_layout) 
     self.show() 

    def signup_show(self): 
     self.signupshow = SignUp() 
     self.hide() 
     self.signupshow.show() 

    def check_signup(self): 
     SignUp.check_signup() 
     self.show() 


def main(): 
    app = QApplication(sys.argv) 
    login = Login() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

and here is signup.py

import sys 
from PyQt4.QtGui import QWidget, QPushButton, QLineEdit, QLabel, \ 
         QApplication, QGridLayout 


class SignUp(QWidget): 
    def __init__(self): 
     super(SignUp, self).__init__() 

     self.setWindowTitle("Sign Up") 

     self.signup_window() 

    def signup_window(self): 

     self.signup_layout = QGridLayout() 
     self.signup_button = QPushButton("Sign Up") 
     self.signup_layout.addWidget(self.signup_button, 2, 0, 1, 0) 
     self.signup_button.clicked.connect(self.check_signup) 
     self.setLayout(self.signup_layout) 
     self.show() 

    def check_signup(self): 
     self.close() 

def main(): 
    app = QApplication(sys.argv) 
    signup = SignUp() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

我的問題是,什麼時候按鈕signup from signup.py,它是關閉的但窗口登錄不顯示。
我想我沒有在任何signup.py爲triggercheck_signup login.py
在這段代碼中,我刪除一些Line EditLabel。我認爲這不是問題。
我希望有人可以幫助,謝謝:)之前
,如果你回答這個questtion,我希望你能解釋的邏輯一點,再次謝謝:)

回答

0

我真的不知道是什麼你試圖達到(你的描述有點混亂),但是讓我們從這裏開始。我把所有的代碼在一個文件,因爲你需要import對方(這會導致循環進口)。然後,我剛添加這兩行

self.login = Login() 
self.login.show() 

SignUp類的check_signup方法,其彈出式窗口Login。如果這不是您想要的結果,請告訴我們並提供更好的描述。代碼如下:

import sys 
from PyQt4.QtGui import QWidget, QPushButton, QLineEdit, QLabel, \ 
         QApplication, QGridLayout 

class Login(QWidget): 
    def __init__(self): 
     super(Login, self).__init__() 

     self.setWindowTitle("Login") 

     self.login_window() 

    def login_window(self): 
     self.login_layout = QGridLayout() 

     self.login_button = QPushButton("Login") 
     self.signup_button = QPushButton("Sign Up") 

     self.login_layout.addWidget(self.login_button, 2, 0) 
     self.login_layout.addWidget(self.signup_button, 2, 1) 

     self.signup_button.clicked.connect(self.signup_show) 

     self.setLayout(self.login_layout) 
     self.show() 

    def signup_show(self): 
     self.signupshow = SignUp() 
     self.hide() 
     self.signupshow.show() 

    def check_signup(self): 
     SignUp.check_signup() 
     self.show() 


class SignUp(QWidget): 
    def __init__(self): 
     super(SignUp, self).__init__() 

     self.setWindowTitle("Sign Up") 

     self.signup_window() 

    def signup_window(self): 

     self.signup_layout = QGridLayout() 
     self.signup_button = QPushButton("Sign Up") 
     self.signup_layout.addWidget(self.signup_button, 2, 0, 1, 0) 
     self.signup_button.clicked.connect(self.check_signup) 
     self.setLayout(self.signup_layout) 
     self.show() 

    def check_signup(self): 
     self.login = Login() 
     self.login.show() 
     self.close() 

def main(): 
    app = QApplication(sys.argv) 
    signup = SignUp() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+0

喜先生,謝謝您的回答。 我已經嘗試之前,我將全班學生成爲2檔呵呵呵呵 我想是從2個不同的文件: 對不起我的英文不好-_- – Oncom

+0

我可以知道你爲什麼需要兩個文件? :) – Matho

+0

忘記這一點,我真的與2文件混淆。 和我現在回到1文件hahahaha。謝謝你,先生:) – Oncom

0

你還是使用信號槽連接:

import sys 
from PyQt4 import QtGui, QtCore 


class WidgetA(QtGui.QWidget): 
    open_b = QtCore.pyqtSignal() 

    def __init__(self, parent=None): 
     super(WidgetA, self).__init__(parent) 
     self.resize(100, 100) 
     self.l = QtGui.QVBoxLayout() 
     self.close_btn = QtGui.QPushButton('Close') 
     self.b_btn = QtGui.QPushButton('Open B') 
     self.b_btn.clicked.connect(self.b_btn_clicked) 
     self.l.addWidget(self.close_btn) 
     self.l.addWidget(self.b_btn) 
     self.setLayout(self.l) 

    def b_btn_clicked(self): 
     self.open_b.emit() 
     self.hide() 


class WidgetB(QtGui.QWidget): 
    open_a = QtCore.pyqtSignal() 

    def __init__(self, parent=None): 
     super(WidgetB, self).__init__(parent) 
     self.resize(100, 100) 
     self.l = QtGui.QVBoxLayout() 
     self.close_btn = QtGui.QPushButton('Close') 
     self.close_btn.clicked.connect(self.hide) 
     self.a_btn = QtGui.QPushButton('Open A') 
     self.a_btn.clicked.connect(self.a_btn_clicked) 
     self.l.addWidget(self.close_btn) 
     self.l.addWidget(self.a_btn) 
     self.setLayout(self.l) 

    def a_btn_clicked(self): 
     self.open_a.emit() 
     self.hide() 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    a = WidgetA() 
    b = WidgetB() 
    a.open_b.connect(lambda: b.show()) 
    b.open_a.connect(lambda: a.show()) 
    a.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

嗯,這是工作。 我需要的是爲每個類創建可變信號並在有趣的main中調用變量? 什麼是「排放」功能? 爲什麼要使用'lambda',我刪除LAMDA我得到了錯誤哈哈哈哈 謝謝主席先生的解釋:) – Oncom

+0

'發射()'「發出」信號,所有的「槽」,這是聽它。 Lambdas就是這些插槽,這也可能是正常的功能(如'a_btn_clicked'和'b_btn_clicked')。下面是官方的解釋:http://doc.qt.io/qt-4.8/signalsandslots.html – bakatrouble

+0

這裏的特定的PyQt-文檔:http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html – bakatrouble