如何在两个 PyQt5 MainWindow 小部件之间切换

2024-06-28

我正在编写一个程序,它有两个不同的部分 - 让我们称它们为 sub1 和 sub2。当我最初运行程序时,会显示 sub1,并且我在后台加载 sub2 但不显示它。我在 sub1 中有一个菜单操作,允许您切换到 sub2,在 sub2 中有一个菜单操作,允许您切换回 sub1。我遇到的问题是当尝试从 sub2 切换回 sub1 时。从 sub1 到 sub2 效果很好; sub1 隐藏,sub2 显示。但是,当尝试再次显示 sub1 时,sub2 不会被隐藏。我对 PyQt 和 Python 都很陌生,所以我还不知道所有复杂的事情。所以,我使用的方法只是我通过反复试验得出的方法,绝不需要这样。下面的简化代码。

#mass module
class MASS(PyQt5.QtWidgets.QMainWindow, massUi.Ui_MainWindow):
    def __init__(self):
        super(MASS, self).__init__()
        self.actionSwitchToCompEval.triggered.connect(self.switchToCompEval)

    def switchToCompEval(self):
        massForm = main.massForm
        massForm.hide()
        compForm = main.compForm
        compForm.show()

    def showMass(self):
        main(1)

def main(initiate=None):
    if initiate == None:
        main.app = PyQt5.QtWidgets.QApplication(sys.argv)
        main.massForm = MASS()
        main.compForm = CompEval.CompEval()
        main.massForm.show()
        main.app.exec_()    
    elif initiate == 1:
        main.massForm = MASS()
        main.compForm = CompEval.CompEval()
        main.compForm.hide()
        main.massForm.show()
    elif initiate == 2:
        pass

if __name__ == '__main__':
    main()    


#comp module

class CompEval(PyQt5.QtWidgets.QMainWindow, compEvalUi.Ui_MainWindow):
    def __init__(self):
        super(CompEval, self).__init__()
        self.actionSwitchToMASS.triggered.connect(self.switchToMass)

    def switchToMass(self):
        mass.MASS().showMass()

def main():
    form = CompEval()
    form.show()

在 switchToCompEval 函数中,引用 main.massForm 和 main.compForm 变量似乎工作正常,但是当我尝试从 sub2(comp) 返回到 sub1(mass) 时,出现错误,表明该函数不包含该变量,这对我来说似乎很奇怪。我知道目前我的设置有几个方面很奇怪并且远非理想,因此任何建议将不胜感激。谢谢。


因此,经过多次实验,我确定解决此问题的最佳方法是将模块组合成一个。如果您有多个 MainWindow 小部件并且需要能够在它们之间来回切换,请将访问所有小部件的类保留在同一模块中。

所以我有两个小部件类:

import PyQt5
import sys
#Below are the modules that are auto-generated when using Qt Designer to make an interface
import compWidget as compEvalUi
import massWidget as massUi 

class MASS(PyQt5.QtWidgets.QMainWindow, massUi.Ui_MainWindow
    def __init__(self):
        super(MASS, self).__init__()
        #setupUi function is in the auto-generated module and contains all the attributes of the interface
        self.setupUi(self)
        #menuSwitch is the name of the button/menu item that would need to be clicked
        #in order to switch windows. 
        #The example shown here is if the action was attached to a menu-dropdown item
        #which is why 'triggered' is used as opposed to 'clicked' if it were attached to a button
        self.menuSwitch.triggered.connect(self.switchToCompWidget)

    def switchToCompWidget(self):
        INITIALIZE.massForm.hide()
        INITIALIZE.compForm.show()

class CompEval(PyQt5.QtWidgets.QMainWindow, compEvalUi.Ui_MainWindow):
    def __init__(self):
        super(CompEval, self).__init__()
        self.setupUi(self)
        self.menuSwitch.triggered.connect(self.switchToMassWidget)

    def switchToMassWidget(self):
        INITIALIZE.compForm.hide()
        INITIALIZE.massForm.show()

class INITIALIZE:
    def __init__(self):
        app = PyQt5.QtWidgets.QApplication(sys.argv)
        INITIALIZE.massForm = MASS()
        INITIALIZE.massForm.show()
        INITIALIZE.compForm = CompEval()
        app.exec_()

def main():
    program = INITIALIZE()

if __name__ =='__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在两个 PyQt5 MainWindow 小部件之间切换 的相关文章

  • 将列表转换为字符串并返回

    我有一个虚拟机 它从嵌套在列表中的元组读取指令 如下所示 0 4738 0 36 0 6376 0 0 存储这种机器代码程序时 文本文件是最简单的 必须写成字符串 这显然很难转换回来 是否有任何模块可以将字符串读入列表 以可读的方式存储列表
  • 我可以使用类属性作为实例方法的默认值吗?

    我想使用类属性作为我的类的参数之一的默认值 init 方法 这个构造提出了一个NameError不过 例外 我不明白为什么 class MyClass DefaultName DefaultName def init self name M
  • async for 的语义等价物

    从相对于的文档async for根据 Python 3 5 中的语法 我发现引入它是为了迭代可等待的迭代器 不过 在描述之后的语义等价物中 我没有得到一些东西 iter ITER iter type iter aiter iter runn
  • R 中的 Python 链接式数据整理

    我是 Python 新手 来自 R 环境 我喜欢 R 的一件事是能够编写代码 在一个可读的代码块中对数据进行多种转换 但对我来说 在 Python 中找到这种风格的代码非常困难 我想知道你们中的一些人是否可以指导在哪里可以找到有关该特定风格
  • 替换 pytest 中的测试用例继承?

    背景 在 Python 中unittest https docs python org 3 library unittest html在框架中 在一组基本测试上使用继承来将整套测试应用于新问题 并且偶尔添加其他测试是一种相当常见的习惯用法
  • Python 元组列表到 int 列表

    所以我有x 12 1 3 元组列表 我想要x 12 1 3 整数列表 以最好的方式可能 你能帮忙吗 你没有说 最好 是什么意思 但大概你的意思是 最Pythonic 或 最易读 或类似的东西 F3AR3DLEGEND 给出的列表理解可能是最
  • 没有要聚合的数字类型 - groupby() 行为发生变化吗?

    我对一些团体代码有问题 我很确定这些代码曾经运行过 在较旧的 pandas 版本上 在 0 9 上 我得到没有要聚合的数字类型错误 有任何想法吗 In 31 data Out 31
  • 如何仅选择从空间实体中提取的第一个实体?

    我正在尝试使用以下代码从 DataFrame 中可用的文本中提取实体 for i in df Text to list doc nlp i for entity in doc ents if entity label GPE 我需要存储第一
  • Keras 的 ImageDataGenerator 是否随机对每个图像应用转换?

    我正在使用 Keras ImageDataGenerator 类训练 CNN 我的代码看起来像这样 from keras callbacks import LearningRateScheduler from keras callbacks
  • Python,针对频繁模式的网络日志数据挖掘

    我需要开发一个用于网络日志数据挖掘的工具 由于在特定用户会话中请求了许多 url 序列 从 Web 应用程序日志中检索 我需要找出网站用户的使用模式和组 集群 我是数据挖掘的新手 现在经常检查谷歌 发现一些有用的信息 即查询似乎指向几乎完全
  • Python字典键(类对象)与多个比较器的比较

    我使用自定义对象作为 python 字典中的键 这些对象有一些默认值hash and eq定义的方法用于默认比较 但在某些功能中我需要使用不同的方式来比较这些对象 那么有什么方法可以覆盖或传递一个新的比较器来仅针对该特定函数进行这些关键比较
  • swaplevel() 和 reorder_levels() 有什么区别?

    在使用 pandas 的分层索引级别时 有什么区别swaplevel https pandas pydata org pandas docs stable generated pandas DataFrame swaplevel html
  • 激活虚拟环境不起作用

    我创建了两个 virtualenv 并安装了两个不同版本的 django 现在我在激活两个环境时遇到问题 我喜欢这样 source Django1 6 bin activate 然后我看到环境被激活了 然后我这样做 pip install
  • 如何在IDLE中同时运行两个模块

    我正在开发一个超级简单的套接字程序 我有客户端代码和服务器代码 如何同时运行这两个 py 文件以查看它们是否有效 您可以同时运行 IDLE Python shell 的多个实例 因此 打开 IDLE 并运行服务器代码 然后再次打开 IDLE
  • 从 C# 运行多个 python 脚本

    我希望有人能够在这里帮助我 我对 C 比较陌生 正在尝试执行我在 C winform 应用程序中编写的一些 Python 代码 我想做的是从 winform 中的文本框中输入名称 并让它通过 python 脚本进行处理 并在 winform
  • 在Python中根据等级和花色对一手牌进行排序

    我正打算制作一款纸牌游戏 目前我正在着手开发它 我感到困惑的是 按牌的等级对手中的牌进行排序 然后按花色排序 以及如何减少重复 目前 我可能可以创建一个 for 循环来组织卡片 然后为每种可能性设置 52 个不同的 if 但我想知道它们是否
  • 传递到 Flask 的可能路线列表?

    我正在学习 Flask 有一个关于动态路由的问题 是否可以传入接受的路由列表 我注意到any转换器具有潜力 但很难找到使用中的示例 基本上我有不同的端点组 它们应该在它们之间触发相同的操作 这就是我的意思 cities New York L
  • Python,将 mongodump 的 bson 输出转换为 json 对象数组(字典)

    我已经使用转储了 mongodb 集合mongodump命令 输出是一个转储目录 其中包含以下文件 dump coll bson coll metadata json 如何将导出的文件打开到在 python 中工作的字典数组中 我尝试了以下
  • 使用具有阿拉伯字符的 json.dumps 将字典转换为 json [重复]

    这个问题在这里已经有答案了 我有一本包含阿拉伯语单词的字典 例如 data name name print json dumps data file open data json a encoding utf 8 Output name u
  • 在Python中使用argparse解析整个JSON

    我正在尝试使用 ARGPARSE 库在一个简单的参数中解析整个 Json 问题是当它遇到儿子内部的不同元素 例如 和 时 它会突然停止 这是测试代码 parse py import argparse parser argparse Argu

随机推荐