hejialiangya 发表于 2023-4-19 16:57:24

【求助】我的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函数
有人可以帮忙看下,并告诉我如何解决么?

我把这部分代码打成了一个压缩包。请问如何上传啊

hejialiangya 发表于 2023-4-19 17:02:30

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())

hejialiangya 发表于 2023-4-19 17:03:26

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())

isdkz 发表于 2023-4-19 18:31:20

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())


经过这些修改,你的代码应该能够正确地实现窗口之间的跳转。

hejialiangya 发表于 2023-4-20 08:49:18

牛逼,不过还有点小问题,点击后执行逻辑了,但是窗体一闪而过就消失了
https://t1.wodetu.cn/2023/04/20/c5c737c2f8e591d9809b6a15ed6b055f.png

有办法让窗体保持显示在菜单栏前端么?想让它实现类似的状态
https://t3.wodetu.cn/2023/04/20/0c7b6c782de5022c348e790b0ae13c6a.png
页: [1]
查看完整版本: 【求助】我的QMenu.Action为什么不正确执行,实现窗体跳转啊