【求助】我的QMenu.Action为什么不正确执行,实现窗体跳转啊
我是将界面和逻辑分开的界面设计各个空间命名如下:编译为MenuWindow.py
https://t1.wodetu.cn/2023/04/19/82d28f86406d25967df7bfc23f375c63.png
逻辑业务步骤设想中如下步骤,编译为Menu.py
https://t4.wodetu.cn/2023/04/19/28a68d7befe66da964a14544402f4cc2.png
实际调试时,点击“核酸检测”acths后不跳转窗口hsjcquery_window,设置了断点,发现他根本不运行acths_open函数
有人可以帮忙看下,并告诉我如何解决么?
我把这部分代码打成了一个压缩包。请问如何上传啊 Menu.py
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
import sys
import MenuWindow
import HSJCQueryWindow
import CXJWindow
class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
def __init__(self):
super(HSJCQueryWindow, self).__init__()
self.setupUi(self)
class MenuWindow(MenuWindow.Ui_MainWindow,QMainWindow):
def __init__(self):
super(MenuWindow, self).__init__()
self.setupUi(self)
#定义QAction触发逻辑
self.acths.triggered.connect(self.acths_open)
def acths_open(self):
hsjcquery_window = HSJCQueryWindow()
hsjcquery_window.show()
def actcxj_open(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
#menuwindow在Main.py已经实例化过了,这里是不是就不用实例化了?
# menu = MenuWindow()
# menu.show()
app.exec()
sys.exit(app.exec()) Main.py
import sys
from PySide6.QtWidgets import QApplication,QMainWindow,QWidget,QDialog,QMessageBox
from PyQt6.QtCore import Qt,QDateTime
import Login
import MenuWindow
# import HSJCQueryWindow
import Dbconnect
# 创建Login类和HSJCQueryWindow类
# class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
# def __init__(self):
# super(HSJCQueryWindow, self).__init__()
# self.setupUi(self)
class MenuWindow(MenuWindow.Ui_MainWindow, QMainWindow):
def __init__(self):
super(MenuWindow, self).__init__()
self.setupUi(self)
class Login(Login.Ui_MainWindow, QMainWindow):
def __init__(self):
super(Login, self).__init__()
self.setupUi(self)
# 登录验证
def login_check():
username = login.UserNameEdit.text()
password = login.PasswordEdit.text()
message = QMessageBox(login)
#sql = "SELECT user_name,COMM.F_DESCRIPT(password) FROM staff_dict WHERE user_name = '{uname}' ANDCOMM.F_DESCRIPT(password) = '{pw}'".format(uname=username, pw=password)
sql = "SELECT hrp_user_name,COMM.F_DESCRIPT(password) FROM staff_dict WHERE hrp_user_name = '{uname}' ".format(uname=username)
Dbconnect.cursor.execute(sql)
results = Dbconnect.cursor.fetchall()
for r in results:
if (len(r)==None):
message = QMessageBox.warning(login, "注意", "用户名不正确请检查")
else:
if (r==password):
menuwindow.show()
# menu.showFullScreen()
else:
message = QMessageBox.critical(login,'注意','用户名或密码错误')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QMainWindow()
# 为Login类和MenuWindow类实例化对象
login = Login()
menuwindow = MenuWindow()
# 显示登陆窗口
login.setupUi(window)
window.show()
# 将login_check函数与登录按钮绑定
login.LoginButton.clicked.connect(login_check)
app.exec()
sys.exit(app.exec()) hejialiangya 发表于 2023-4-19 17:03
Main.py
从你的代码来看,有些地方需要修改和调整。首先,你需要确保从 MenuWindow.py 导入 MenuWindow 类。同样,从 HSJCQueryWindow 导入 HSJCQueryWindow 类。让我们来调整一下 Menu.py 和 Main.py 文件。
在 Menu.py 文件中,你需要将你的 MenuWindow 类导入到 Main.py 文件中。另外,你也需要将 HSJCQueryWindow 类导入到 Main.py 文件中。这是修改后的 Menu.py 文件:
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
import sys
import MenuWindow
import HSJCQueryWindow
import CXJWindow
class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
def __init__(self):
super(HSJCQueryWindow, self).__init__()
self.setupUi(self)
class MenuWindow(MenuWindow.Ui_MainWindow, QMainWindow):
def __init__(self):
super(MenuWindow, self).__init__()
self.setupUi(self)
# 定义QAction触发逻辑
self.acths.triggered.connect(self.acths_open)
def acths_open(self):
hsjcquery_window = HSJCQueryWindow()
hsjcquery_window.show()
def actcxj_open(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
menu = MenuWindow()
menu.show()
app.exec()
sys.exit(app.exec())
接下来,我们需要在 Main.py 文件中调整一些内容。首先,你需要确保你导入了正确的 MenuWindow 和 HSJCQueryWindow 类。然后,你需要确保你在 login_check 函数中调用了正确的 MenuWindow 实例。这是修改后的 Main.py 文件:
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QDialog, QMessageBox
from PyQt6.QtCore import Qt, QDateTime
import Login
from Menu import MenuWindow, HSJCQueryWindow# 导入 MenuWindow 和 HSJCQueryWindow
import Dbconnect
class Login(Login.Ui_MainWindow, QMainWindow):
def __init__(self):
super(Login, self).__init__()
self.setupUi(self)
def login_check():
# ... 省略了一部分代码 ...
if (r==password):
menuwindow.show()# 使用 menuwindow 实例
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QMainWindow()
login = Login()
menuwindow = MenuWindow()# 创建 MenuWindow 实例
login.setupUi(window)
window.show()
login.LoginButton.clicked.connect(login_check)
app.exec()
sys.exit(app.exec())
经过这些修改,你的代码应该能够正确地实现窗口之间的跳转。
牛逼,不过还有点小问题,点击后执行逻辑了,但是窗体一闪而过就消失了
https://t1.wodetu.cn/2023/04/20/c5c737c2f8e591d9809b6a15ed6b055f.png
有办法让窗体保持显示在菜单栏前端么?想让它实现类似的状态
https://t3.wodetu.cn/2023/04/20/0c7b6c782de5022c348e790b0ae13c6a.png
页:
[1]