2017-07-14 34 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