鱼C论坛

 找回密码
 立即注册
查看: 2408|回复: 4

[已解决]【求助】我的QMenu.Action为什么不正确执行,实现窗体跳转啊

[复制链接]
发表于 2023-4-19 16:57:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我是将界面和逻辑分开的
界面设计各个空间命名如下:编译为MenuWindow.py

                               
登录/注册后可看大图

逻辑业务步骤设想中如下步骤,编译为Menu.py

                               
登录/注册后可看大图


实际调试时,点击“核酸检测”acths后不跳转窗口hsjcquery_window,设置了断点,发现他根本不运行acths_open函数
有人可以帮忙看下,并告诉我如何解决么?

我把这部分代码打成了一个压缩包。请问如何上传啊
最佳答案
2023-4-19 18:31:20

从你的代码来看,有些地方需要修改和调整。首先,你需要确保从 MenuWindow.py 导入 MenuWindow 类。同样,从 HSJCQueryWindow 导入 HSJCQueryWindow 类。让我们来调整一下 Menu.py 和 Main.py 文件。

在 Menu.py 文件中,你需要将你的 MenuWindow 类导入到 Main.py 文件中。另外,你也需要将 HSJCQueryWindow 类导入到 Main.py 文件中。这是修改后的 Menu.py 文件:

  1. from PySide6.QtCore import *
  2. from PySide6.QtGui import *
  3. from PySide6.QtWidgets import *
  4. import sys
  5. import MenuWindow
  6. import HSJCQueryWindow
  7. import CXJWindow

  8. class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
  9.     def __init__(self):
  10.         super(HSJCQueryWindow, self).__init__()
  11.         self.setupUi(self)

  12. class MenuWindow(MenuWindow.Ui_MainWindow, QMainWindow):
  13.     def __init__(self):
  14.         super(MenuWindow, self).__init__()
  15.         self.setupUi(self)
  16.         # 定义QAction触发逻辑
  17.         self.acths.triggered.connect(self.acths_open)

  18.     def acths_open(self):
  19.         hsjcquery_window = HSJCQueryWindow()
  20.         hsjcquery_window.show()

  21.     def actcxj_open(self):
  22.         pass

  23. if __name__ == '__main__':
  24.     app = QApplication(sys.argv)
  25.     menu = MenuWindow()
  26.     menu.show()
  27.     app.exec()
  28.     sys.exit(app.exec())
复制代码


接下来,我们需要在 Main.py 文件中调整一些内容。首先,你需要确保你导入了正确的 MenuWindow 和 HSJCQueryWindow 类。然后,你需要确保你在 login_check 函数中调用了正确的 MenuWindow 实例。这是修改后的 Main.py 文件:

  1. import sys
  2. from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QDialog, QMessageBox
  3. from PyQt6.QtCore import Qt, QDateTime
  4. import Login
  5. from Menu import MenuWindow, HSJCQueryWindow  # 导入 MenuWindow 和 HSJCQueryWindow
  6. import Dbconnect

  7. class Login(Login.Ui_MainWindow, QMainWindow):
  8.     def __init__(self):
  9.         super(Login, self).__init__()
  10.         self.setupUi(self)

  11. def login_check():
  12.     # ... 省略了一部分代码 ...

  13.     if (r[1]==password):
  14.         menuwindow.show()  # 使用 menuwindow 实例

  15. if __name__ == '__main__':
  16.     app = QApplication(sys.argv)
  17.     window = QMainWindow()
  18.     login = Login()
  19.     menuwindow = MenuWindow()  # 创建 MenuWindow 实例
  20.     login.setupUi(window)
  21.     window.show()
  22.     login.LoginButton.clicked.connect(login_check)
  23.     app.exec()
  24.     sys.exit(app.exec())
复制代码


经过这些修改,你的代码应该能够正确地实现窗口之间的跳转。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-19 17:02:30 | 显示全部楼层
Menu.py
  1. from PySide6.QtCore import *
  2. from PySide6.QtGui import *
  3. from PySide6.QtWidgets import *
  4. import sys
  5. import MenuWindow
  6. import HSJCQueryWindow
  7. import CXJWindow

  8. class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
  9.         def __init__(self):
  10.             super(HSJCQueryWindow, self).__init__()
  11.             self.setupUi(self)

  12. class MenuWindow(MenuWindow.Ui_MainWindow,QMainWindow):
  13.     def __init__(self):
  14.         super(MenuWindow, self).__init__()
  15.         self.setupUi(self)
  16.         #定义QAction触发逻辑
  17.         self.acths.triggered.connect(self.acths_open)

  18.     def acths_open(self):
  19.         hsjcquery_window = HSJCQueryWindow()
  20.         hsjcquery_window.show()

  21.     def actcxj_open(self):
  22.         pass

  23. if __name__ == '__main__':
  24.     app = QApplication(sys.argv)
  25.     #menuwindow在Main.py已经实例化过了,这里是不是就不用实例化了?
  26.     # menu = MenuWindow()
  27.     # menu.show()
  28.     app.exec()
  29.     sys.exit(app.exec())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-19 17:03:26 | 显示全部楼层
Main.py
  1. import sys
  2. from PySide6.QtWidgets import QApplication,QMainWindow,QWidget,QDialog,QMessageBox
  3. from PyQt6.QtCore import Qt,QDateTime
  4. import Login
  5. import MenuWindow
  6. # import HSJCQueryWindow
  7. import Dbconnect

  8. # 创建Login类和HSJCQueryWindow类
  9. # class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
  10. #         def __init__(self):
  11. #             super(HSJCQueryWindow, self).__init__()
  12. #             self.setupUi(self)
  13. class MenuWindow(MenuWindow.Ui_MainWindow, QMainWindow):
  14.     def __init__(self):
  15.         super(MenuWindow, self).__init__()
  16.         self.setupUi(self)

  17. class Login(Login.Ui_MainWindow, QMainWindow):
  18.         def __init__(self):
  19.             super(Login, self).__init__()
  20.             self.setupUi(self)

  21. # 登录验证
  22. def login_check():
  23.     username = login.UserNameEdit.text()
  24.     password = login.PasswordEdit.text()
  25.     message = QMessageBox(login)
  26.     #sql = "SELECT user_name,COMM.F_DESCRIPT(password) FROM staff_dict WHERE user_name = '{uname}' AND  COMM.F_DESCRIPT(password) = '{pw}'".format(uname=username, pw=password)
  27.     sql = "SELECT hrp_user_name,COMM.F_DESCRIPT(password) FROM staff_dict WHERE hrp_user_name = '{uname}' ".format(uname=username)
  28.     Dbconnect.cursor.execute(sql)
  29.     results = Dbconnect.cursor.fetchall()
  30.     for r in results:
  31.         if (len(r[0])==None):
  32.             message = QMessageBox.warning(login, "注意", "用户名不正确请检查")
  33.         else:
  34.             if (r[1]==password):
  35.                 menuwindow.show()
  36.                 # menu.showFullScreen()
  37.             else:
  38.                 message = QMessageBox.critical(login,'注意','用户名或密码错误')

  39. if __name__ == '__main__':
  40.     app = QApplication(sys.argv)
  41.     window = QMainWindow()
  42.     # 为Login类和MenuWindow类实例化对象
  43.     login = Login()
  44.     menuwindow = MenuWindow()
  45.     # 显示登陆窗口
  46.     login.setupUi(window)
  47.     window.show()
  48.     # 将login_check函数与登录按钮绑定
  49.     login.LoginButton.clicked.connect(login_check)
  50.     app.exec()
  51.     sys.exit(app.exec())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-19 18:31:20 | 显示全部楼层    本楼为最佳答案   

从你的代码来看,有些地方需要修改和调整。首先,你需要确保从 MenuWindow.py 导入 MenuWindow 类。同样,从 HSJCQueryWindow 导入 HSJCQueryWindow 类。让我们来调整一下 Menu.py 和 Main.py 文件。

在 Menu.py 文件中,你需要将你的 MenuWindow 类导入到 Main.py 文件中。另外,你也需要将 HSJCQueryWindow 类导入到 Main.py 文件中。这是修改后的 Menu.py 文件:

  1. from PySide6.QtCore import *
  2. from PySide6.QtGui import *
  3. from PySide6.QtWidgets import *
  4. import sys
  5. import MenuWindow
  6. import HSJCQueryWindow
  7. import CXJWindow

  8. class HSJCQueryWindow(HSJCQueryWindow.Ui_MainWindow, QMainWindow):
  9.     def __init__(self):
  10.         super(HSJCQueryWindow, self).__init__()
  11.         self.setupUi(self)

  12. class MenuWindow(MenuWindow.Ui_MainWindow, QMainWindow):
  13.     def __init__(self):
  14.         super(MenuWindow, self).__init__()
  15.         self.setupUi(self)
  16.         # 定义QAction触发逻辑
  17.         self.acths.triggered.connect(self.acths_open)

  18.     def acths_open(self):
  19.         hsjcquery_window = HSJCQueryWindow()
  20.         hsjcquery_window.show()

  21.     def actcxj_open(self):
  22.         pass

  23. if __name__ == '__main__':
  24.     app = QApplication(sys.argv)
  25.     menu = MenuWindow()
  26.     menu.show()
  27.     app.exec()
  28.     sys.exit(app.exec())
复制代码


接下来,我们需要在 Main.py 文件中调整一些内容。首先,你需要确保你导入了正确的 MenuWindow 和 HSJCQueryWindow 类。然后,你需要确保你在 login_check 函数中调用了正确的 MenuWindow 实例。这是修改后的 Main.py 文件:

  1. import sys
  2. from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QDialog, QMessageBox
  3. from PyQt6.QtCore import Qt, QDateTime
  4. import Login
  5. from Menu import MenuWindow, HSJCQueryWindow  # 导入 MenuWindow 和 HSJCQueryWindow
  6. import Dbconnect

  7. class Login(Login.Ui_MainWindow, QMainWindow):
  8.     def __init__(self):
  9.         super(Login, self).__init__()
  10.         self.setupUi(self)

  11. def login_check():
  12.     # ... 省略了一部分代码 ...

  13.     if (r[1]==password):
  14.         menuwindow.show()  # 使用 menuwindow 实例

  15. if __name__ == '__main__':
  16.     app = QApplication(sys.argv)
  17.     window = QMainWindow()
  18.     login = Login()
  19.     menuwindow = MenuWindow()  # 创建 MenuWindow 实例
  20.     login.setupUi(window)
  21.     window.show()
  22.     login.LoginButton.clicked.connect(login_check)
  23.     app.exec()
  24.     sys.exit(app.exec())
复制代码


经过这些修改,你的代码应该能够正确地实现窗口之间的跳转。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-20 08:49:18 | 显示全部楼层
牛逼,不过还有点小问题,点击后执行逻辑了,但是窗体一闪而过就消失了

                               
登录/注册后可看大图


有办法让窗体保持显示在菜单栏前端么?想让它实现类似的状态

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 23:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表