2014-01-09 41 views
0

我是PySide的新手,我想创建一个多窗口应用程序。例如,第一个窗口将是登录窗口,如果登录是正确的,那么应该隐藏登录窗口并出现下一个窗口。在PySide中创建多窗口应用程序

我该如何做到这一点?

import sys 
from PySide.QtGui import * 
from PySide.QtCore import * 
import chooseoption 

class Form(QDialog): 
def __init__(self, parent = None): 
    super(Form,self).__init__(parent) 

    self.usernamelabel = QLabel("Username : ") 
    self.passwordlabel = QLabel("Password : ") 
    self.username = QLineEdit() 
    self.password = QLineEdit() 
    self.okbutton = QPushButton("Login") 
    self.username.setPlaceholderText("Enter Username Here") 
    self.password.setPlaceholderText("Enter Password Here") 

    layout = QGridLayout() 
    layout.addWidget(self.usernamelabel,0,0) 
    layout.addWidget(self.passwordlabel,1,0) 
    layout.addWidget(self.username,0,1) 
    layout.addWidget(self.password,1,1) 
    layout.addWidget(self.okbutton) 
    self.setLayout(layout) 

    self.usernamelist = ['priyank','stupendo','ayaan'] 
    self.passwordlist = ['priyank','stupendo','ayaan'] 

    self.connect(self.okbutton, SIGNAL("clicked()"),self.loginfunction) 

def loginfunction(self): 
    usernamestatus = False 
    usernameindex = -1 
    passwordstatus = False 
    passwordindex = -1 
    for currentusername in range(len(self.usernamelist)): 
     if self.passwordlist[currentusername] == self.username.text(): 
      usernamestatus = True 
      usernameindex = self.usernamelist.index(self.passwordlist[currentusername]) 

    for currentpassword in range(len(self.passwordlist)): 
     if self.usernamelist[currentpassword] ==self.password.text(): 
      passwordstatus = True 
      passwordindex = self.passwordlist.index(self.usernamelist[currentpassword]) 

    if usernamestatus == True and passwordstatus ==True and usernameindex == passwordindex: 

     w2 = chooseoption.Form1() 
     w2.show() 

    else: 
     self.msgBox = QMessageBox() 
     self.msgBox.setText("invalid!!!") 
     self.msgBox.exec_() 



app = QApplication(sys.argv) 
form = Form() 
form.show() 
sys.exit(app.exec_()) 

这是我chooseoption.py文件:

import sys 
from PySide.QtGui import * 
from PySide.QtCore import * 

class Form1(QDialog): 

def __init__(self, parent = None): 
    super(Form1,self).__init__(parent) 

    self.addbutton = QPushButton("Add file in Important list") 
    self.removebutton = QPushButton("Remove file from Important list") 
    self.changeaddressbutton = QPushButton("Change Location of Important File") 

    layout = QHBoxLayout() 
    layout.addWidget(self.addbutton) 
    layout.addWidget(self.removebutton) 
    layout.addWidget(self.changeaddressbutton) 
    self.setLayout(layout) 

的问题,这是我的第二个窗口,只是在屏幕上出现几毫秒,然后消失。我该如何解决这个问题?下面

+2

亲爱SO用户。您未能满足本网站的要求。你没有显示努力或代码。换句话说,你到目前为止做了什么? – Oybek

回答

2

代码创建三个窗口依次为:

from PySide.QtCore import * 
from PySide.QtGui import * 
import sys 

class W1(QWidget): 
    def __init__(self, parent=None): 
     super(W1, self).__init__(parent) 
     self.btn = QPushButton('Click1') 

     vb = QVBoxLayout() 
     vb.addWidget(self.btn) 
     self.setLayout(vb) 

     self.btn.clicked.connect(self.fireupWindows2) 

    def fireupWindows2(self): 
     w2 = W2() 
     if w2.exec_(): 
      self.w3 = W3()  
      self.w3.show() 

class W2(QDialog): 
    def __init__(self, parent=None): 
     super(W2, self).__init__(parent) 

     self.btn = QPushButton('Click2') 

     vb = QVBoxLayout() 
     vb.addWidget(self.btn) 
     self.setLayout(vb) 

     self.btn.clicked.connect(self.fireupWindows3) 

    def fireupWindows3(self): 
     self.accept() 

class W3(QWidget): 
    def __init__(self, parent=None): 
     super(W3, self).__init__(parent) 
     self.resize(300, 300) 
     self.btn = QLabel('The Last Window') 

     vb = QVBoxLayout() 
     vb.addWidget(self.btn) 
     self.setLayout(vb) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    w = W1() 
    w.show() 
    sys.exit(app.exec_()) 
+0

你能解释你为什么要做W2级(QDialog)而不是W2级(QWidget)吗? – user2788859

+0

什么是exec_()函数? – user2788859

+1

@ user2788859 QDialog继承了QWidget,只是为了更具体地使它成为一个对话框。关于'exec _()',请尝试删除该语句,看看会发生什么;) – zhangxaochen

0

不知怎的,我是能够解决上述问题

test.py文件:

import sys 
from PySide.QtGui import * 
from PySide.QtCore import * 
import chooseoption 

class Form(QDialog): 
def __init__(self, parent = None): 
    super(Form,self).__init__(parent) 

    self.usernamelabel = QLabel("Username : ") 
    self.passwordlabel = QLabel("Password : ") 
    self.username = QLineEdit() 
    self.password = QLineEdit() 
    self.okbutton = QPushButton("Login") 
    self.username.setPlaceholderText("Enter Username Here") 
    self.password.setPlaceholderText("Enter Password Here") 

    layout = QGridLayout() 
    layout.addWidget(self.usernamelabel,0,0) 
    layout.addWidget(self.passwordlabel,1,0) 
    layout.addWidget(self.username,0,1) 
    layout.addWidget(self.password,1,1) 
    layout.addWidget(self.okbutton) 
    self.setLayout(layout) 

    self.usernamelist = ['priyank','stupendo','ayaan'] 
    self.passwordlist = ['priyank','stupendo','ayaan'] 

    self.connect(self.okbutton, SIGNAL("clicked()"),self.loginfunction) 

def loginfunction(self): 
    usernamestatus = False 
    usernameindex = -1 
    passwordstatus = False 
    passwordindex = -1 
    for currentusername in range(len(self.usernamelist)): 
     if self.passwordlist[currentusername] == self.username.text(): 
      usernamestatus = True 
      usernameindex = self.usernamelist.index(self.passwordlist[currentusername]) 

    for currentpassword in range(len(self.passwordlist)): 
     if self.usernamelist[currentpassword] ==self.password.text(): 
      passwordstatus = True 
      passwordindex = self.passwordlist.index(self.usernamelist[currentpassword]) 

    if usernamestatus == True and passwordstatus ==True and usernameindex == passwordindex: 
     self.hide() 
     w2 = chooseoption.Form1(self) 
     w2.show() 


    else: 
     self.msgBox = QMessageBox() 
     self.msgBox.setText("Bloody Hacker!!!") 
     self.msgBox.exec_() 



app = QApplication(sys.argv) 
form = Form() 
form.show() 
sys.exit(app.exec_()) 

,这是第二个窗口:

import sys 
from PySide.QtGui import * 
from PySide.QtCore import * 

class Form1(QDialog): 

def __init__(self, parent = None): 
    super(Form1,self).__init__(parent) 

    self.addbutton = QPushButton("Add file in Important list") 
    self.removebutton = QPushButton("Remove file from Important list") 
    self.changeaddressbutton = QPushButton("Change Location of Important File") 

    layout = QVBoxLayout() 
    layout.addWidget(self.addbutton) 
    layout.addWidget(self.removebutton) 
    layout.addWidget(self.changeaddressbutton) 
    self.setLayout(layout) 

重要的部分是隐藏第一窗口,并创建具有自作为参数第二窗口的对象,然后显示第二窗口

self.hide() 
w2 = chooseoption.Form1(self) 
w2.show()