Qt的问题如何打开它们之间调用的2个窗口
Posted
技术标签:
【中文标题】Qt的问题如何打开它们之间调用的2个窗口【英文标题】:Problems with Qt How to open 2 windows that are called between them 【发布时间】:2017-04-24 03:15:38 【问题描述】:Qt 的问题 如何打开它们之间调用的 2 个窗口
大家好,我是 Qt 新手,我遇到的问题如下:
当我使用按钮调用时,我有一个Login.py
窗口打开一个新的Panel_administrator.py
窗口,并且该窗口有一个可以调用Login.py
的按钮
简而言之:
Login.py
---->通话 -----> Panel_Administrador.py
和
Panel_Administrador.py
----> 通话 ----> Login.py
给我以下错误:
Traceback(最近一次调用最后一次): ..................... ImportError: 无法导入名称'panel_administrador'
我的代码:
import sys
import time
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QWidget
import Con_pos
from Registro import Registro
from Panel_Administrador import panel_administrador
class Login(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent= parent)
uic.loadUi("UI/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()
fecha = time.strftime("%X") + " " + time.strftime("%x")
if user != "" and password != "":
consulta = ''' SELECT "id_usuario" FROM "usuarios"."Usuario" WHERE "id_usuario" = '%s' ; ''' %(user)
c_user = con.consulta(consulta)
consulta = ''' SELECT "pass" FROM "usuarios"."Usuario" WHERE "id_usuario" = '%s' ;''' %(user)
c_pass = con.consulta(consulta)
if c_user != None or not c_pass:
c_pass = c_pass[0][0]
if c_pass == password:
consulta = ''' INSERT INTO "usuarios"."sesion" VALUES ('%s', '%s', %s); '''%(user ,fecha, pid)
con.insertar(consulta)
print("Ingresando al sistema...")
if self.administrador(user):
self.admi = panel_administrador()
self.admi.show()
else:
print("Usuario o password incorrecto")
def administrador(self, user):
ad = ''' SELECT "id_rol" FROM "usuarios"."Rol" WHERE "rol" = 'administrador'; '''
consulta = ''' SELECT "id_usuario_Usuario" FROM "usuarios"."Usuario_Rol" WHERE "id_rol_Rol" = %s and "id_usuario_Usuario" = '%s' ''' %(ad, user)
con_res = Con_pos.con_pos().consulta(consulta)
print(con_res)
if con_res or con_res != None:
return True
else:
return False;
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):
self.reg = Registro()
self.reg.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
login = Login()
login.show()
sys.exit(app.exec())
Panel_Administrador.py
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QWidget
from Designar import designar
from Funciones import funciones
from Login import Login
from Admi_Users import admin_user
from Rol import rol
class panel_administrador(QWidget):
def __init__(self):
QWidget.__init__(self)
uic.loadUi("UI/Panel_Administrador.ui", self)
self.btn_funciones.clicked.connect(self.view_funciones)
self.btn_roles.clicked.connect(self.view_roles)
self.btn_usuarios.clicked.connect(self.view_usuario)
self.btn_designar.clicked.connect(self.view_designar)
self.btn_login.clicked.connect(self.view_login)
def view_funciones(self):
self.f = funciones()
self.f.show()
def view_roles(self):
self.r = rol()
self.r.show()
def view_usuario(self):
self.u = admin_user()
self.u.show()
def view_designar(self):
self.d = designar()
self.d.show()
def view_login(self):
self.l = Login()
self.l.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
pa = panel_administrador()
pa.show()
sys.exit(app.exec())
【问题讨论】:
请阅读:***.com/questions/744373/… 还有这个:***.com/help/mcve 您的代码无法播放,因为有无法定义的类。 【参考方案1】:发生的问题称为循环导入,它会生成递归循环。解决方案是更好地构建代码。在这种情况下,我将展示如何执行此操作的示例,我将创建 2 个名为管理面板和登录的类,每个类都包含一个按钮,对象是调用另一个窗口,反之亦然。创建另一个我将调用 main.py
的文件,我将在其中建立按钮之间的连接。
文件具有以下结构:
├── Login.py
├── main.py
└── Panel_Administrador.py
Login.py
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout
class Login(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent= parent)
self.setWindowTitle("Login")
lay = QVBoxLayout(self)
self.btn = QPushButton("LLamar a Panel Administrador")
lay.addWidget(self.btn)
self.btn.clicked.connect(self.hide)
Panel_Administrador.py
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout
class panel_administrador(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
self.setWindowTitle("Panel de Administración")
lay = QVBoxLayout(self)
self.btn = QPushButton("Llamar a Login")
lay.addWidget(self.btn)
self.btn.clicked.connect(self.hide)
main.py
from PyQt5.QtWidgets import QApplication
import sys
from Panel_Administrador import panel_administrador
from Login import Login
if __name__ == "__main__":
app = QApplication(sys.argv)
p = panel_administrador()
l = Login()
l.btn.clicked.connect(p.show)
p.btn.clicked.connect(l.show)
p.show()
sys.exit(app.exec())
【讨论】:
以上是关于Qt的问题如何打开它们之间调用的2个窗口的主要内容,如果未能解决你的问题,请参考以下文章