2017-04-20 89 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

    相關問題