2017-04-20 47 views
0

当试图用PyQt5和QT设计器开发一个GUI时,我遇到了一个问题。如何创建一个窗口,用uic模块打开另一个窗口? Qt-Designer和Python

我想用uic模块,我有一个.ui文件名为,另有login.ui,因为我可以从login.ui打电话到registry.ui,通过点击BUTTOM registro

我也有Login.pyRegistro.py文件分别

我的目的是点击注册按钮,打开注册窗口

只使用uic.loadUI()方法?

在这里,我表明我的代码

类登录 login.py

import sys 
import time 
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget 
from PyQt5 import uic 
import Con_pos 
from Registro import Registro 
class Login(QWidget): 

    def __init__(self): 
     QWidget.__init__(self) 
     uic.loadUi("Login.ui", self) 
     self.registro.clicked.connect(self.view_Registro) 
     self.ingresar.clicked.connect(self.autenticar) 

    def autenticar(self): 
     pid = self.getPID() 
     con = Con_pos.con_pos() 
     user = self.in_login.text() 
     password = self.in_pass.text() 
     print(password) 
     fecha = time.strftime("%X") + " " + time.strftime("%x") 
     if user != "" and password != "": 
      consulta = ''' SELECT "id_user" FROM "User" WHERE "id_user" = '%s' ; ''' %(user) 
      c_user = con.consulta(consulta) 
      print(c_user) 
      consulta = ''' SELECT "pass" FROM "User" WHERE "id_user" = '%s' ;''' %(user) 
      c_pass = con.consulta(consulta) 
      if c_user != None: 
       c_pass = c_pass[0] 
       print("test") 
       print(c_pass) 
       if c_pass == password: 
        consulta = ''' INSERT INTO "sesion" VALUES ('%s', '%s', '%s'); '''%(fecha ,pid, user) 
        con.insertar(consulta) 
    def getPID(self): 
     con = Con_pos.con_pos() 
     func = "pg_backend_pid" 
     pid = con.call_proc(func) 
     pid = pid[0][0] 
     return pid 

    def view_Registro(self): 
     reg = Registro.Registro() 
     reg.show() 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    login = Login() 
    login.show() 
    sys.exit(app.exec()) 

类Registro: Registro.py

import sys 
import time 
from PyQt5.QtWidgets import QApplication, QMainWindow 
from PyQt5 import uic 
import Con_pos 
import error_log as error 

class Registro(QMainWindow): 
    con = Con_pos.con_pos() 
    def __init__(self): 
     QMainWindow.__init__(self) 
     uic.loadUi("Registro.ui", self) 
     self.btn_reg.clicked.connect(self.validar_nombre) 

    def validar_nombre(self): 
     fecha = time.strftime("%X") + " " + time.strftime("%x") 
     usuario = self.user_tx_input.text() 
     password = self.pass_tx_input.text() 
     if usuario != "": 
      pid = self.getPID() 
      consul = '''SELECT "id_user" FROM "User" WHERE "id_user" = '%s'; ''' % (usuario) 
      res_con = Registro.con.consulta(consul) 

      if not res_con: 
       ins_user = '''INSERT INTO "User" VALUES ('%s', '%s') ''' % (usuario, password) 
       ins_sesion = ''' INSERT INTO "sesion" VALUES ('%s', %s,'%s') ''' % (fecha, pid, usuario) 
       Registro.con.insertar(ins_user) 
       Registro.con.insertar(ins_sesion) 
      else: 
       err = error.error_dia() 
       err.etiqueta.setText("El usuario %s ya esta en uso" % (usuario)) 
       err.exec() 

    def getPID(self): 
     func = "pg_backend_pid" 
     pid = Registro.con.call_proc(func) 
     pid = pid[0][0] 
     return pid 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    ventana = Registro() 
    ventana.show() 
    sys.exit(app.exec()) 
+0

当调用注册窗口,会发生什么情况登录窗口保持打开还是关闭? – eyllanesc

+0

问题是我不能打电话给“Registro”窗口,我得到一个错误,并且它关闭了所有内容,但我的目标是通过登录打开“Registro”窗口 – Andres

+0

我提出了一个解决方案,请尝试 – eyllanesc

回答

0

你要通过作为父母相提并论ameter到新窗口,你可以做到这一点有两种方式:

  1. 第一个解决方案:使变量章类的属性:

def view_Registro(self): 
    self.reg = Registro() 
    self.reg.show() 
  • 第二种解决方案:作为参数传递给同一实例:

  • def view_Registro(self): 
        reg = Registro(self) 
        reg.show() 
    

    对于这个解决方案必须更改:

    class Registro(QMainWindow): 
        con = Con_pos.con_pos() 
        def __init__(self): 
         QMainWindow.__init__(self) 
    

    class Registro(QMainWindow): 
        con = Con_pos.con_pos() 
        def __init__(self, parent=None): 
         QMainWindow.__init__(self, parent=parent) 
    
    +0

    Hello已经尝试,你给我的2个步骤,但我还是留下错误 的错误,我得到的是这样的: 回溯(最近通话最后一个): 文件“Login.py”,43行,在view_Registro 注册= Record.Registration(self) AttributeError:类型对象'Record'没有属性'Record' [1] 434 abort(核心转储)python登录。py – Andres

    +0

    使用第一个解决方案 – eyllanesc

    +0

    是2个解决方案,而不是2个步骤。 – eyllanesc

    相关问题