鱼C论坛

 找回密码
 立即注册
查看: 1428|回复: 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 文件:
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[1]==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())

经过这些修改,你的代码应该能够正确地实现窗口之间的跳转。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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}' AND  COMM.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[0])==None):
            message = QMessageBox.warning(login, "注意", "用户名不正确请检查")
        else:
            if (r[1]==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())
想知道小甲鱼最近在做啥?请访问 -> 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 文件:
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[1]==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())

经过这些修改,你的代码应该能够正确地实现窗口之间的跳转。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

                               
登录/注册后可看大图


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

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 15:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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