将整个 *ui 文件加载到另一个 *.ui 文件的框架/小部件中

2024-03-27

我正在为家庭项目开发一个小型用户界面。我使用 QT-Designer 创建了一个 *.ui 文件。这是我的主窗口,带有一些导航按钮、标签等。现在,当我单击导航按钮时,我正在努力在主窗口的框架或小部件中加载另一个 *.ui(例如内容)。我正在使用 pyqt4,我必须在树莓派上用 python 来实现它。

我也使用了搜索,但没有找到解决我的问题的有效解决方案。也许这真的很容易,但对我来说很难。

*重要提示:我不想重新组织按钮和标签!我想在主窗口中的小部件或框架中加载整个 *.ui 文件!

这是我的代码示例: 以下是我的main.py

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import *

def buttonKlick1close():
start.close()

start = loadUi("start.ui")
start.connect(start.pushButton, SIGNAL("clicked()") , buttonKlick1close)

# there are other "signal-connections" for my navigation buttons but I 
# integreated all exactly the same like above. 
# actually when I click to another navigation button it will open an "def" 
# with "window2.showFullscreen()" and so on.... 

start.showFullScreen()
app.exit(app.exec_())

现在,当我单击导航按钮时,它总是会打开 7-8 个窗口,因此我还需要每个窗口上都有整个导航按钮。 我的目标是创建一个带有导航按钮和框架/小部件的窗口,我可以在其中升级/加载其他 *ui 文件。或者是否有另一个没有框架/小部件的好解决方案?


首先,我的解决方案的基础是推广小部件,为此我将按以下方式构建项目:

├── main.py
├── pages
│   ├── energypage.py
│   ├── fanpage.py
│   ├── homepage.py
│   └── statuspage.py
└── ui
    ├── energy.ui
    ├── fan.ui
    ├── home.ui
    ├── main.ui
    └── status.ui

页面的 .ui 将基于 Widget 模板,但主页面将使用 MainWindow 模板(MainWindow 允许拥有 ToolBars、StatusBar、DockWidgets、menuBar 等,因此我选择它作为主页面)。

由于 .ui 本身无法升级,因此将创建调用设计并遵循类似结构的类,但您可以添加更多功能,例如 homepage.py 的情况:

import os
from PyQt4 import QtGui, uic


current_dir = os.path.dirname(os.path.abspath(__file__))
Form, Base = uic.loadUiType(os.path.join(current_dir, "../ui/home.ui"))


class HomeWidget(Base, Form):
    def __init__(self, parent=None):
        super(self.__class__, self).__init__(parent)
        self.setupUi(self)


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = HomeWidget()
    w.show()
    sys.exit(app.exec_())

main.ui 的左侧有按钮,右侧有 QStackedWidget:

通过选择选项“插入页面 -> 在右键单击 QStackedWidget 打开的菜单的当前页面之后”来添加每个页面

然后它将被提升为使用页面文件夹中的小部件:

然后主要将按钮与适当的索引相关联:

main.py

import os
from PyQt4 import QtGui, uic
from functools import partial

current_dir = os.path.dirname(os.path.abspath(__file__))
Form, Base = uic.loadUiType(os.path.join(current_dir, "ui/main.ui"))

class MainWidget(Base, Form):
    def __init__(self, parent=None):
        super(self.__class__, self).__init__(parent)
        self.setupUi(self)
        buttons = (self.homebutton, self.statusbutton, self.fanbutton, self.energybutton)
        for i, button in enumerate(buttons):
            button.clicked.connect(partial(self.stackedWidget.setCurrentIndex, i))

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    app.setStyle("fusion")
    w = MainWidget()
    w.show()
    sys.exit(app.exec_())

完整的例子是here https://github.com/eyllanesc/stackoverflow/tree/master/questions/53899209.

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

将整个 *ui 文件加载到另一个 *.ui 文件的框架/小部件中 的相关文章

随机推荐

  • Python - 如何检查文件是否被另一个应用程序使用?

    我想打开一个由另一个应用程序定期写入的文件 该应用程序无法修改 因此 我只想在知道该文件未被其他应用程序写入时才打开该文件 有没有Pythonic的方法来做到这一点 否则 我如何在 Unix 和 Windows 中实现这一点 edit 我会
  • 从头开始为 JRE 创建 Docker 映像

    我正在尝试使用 JRE 创建映像而不使用任何操作系统 我尝试了这个 Dockerfile 但不起作用 FROM openjdk 11 0 1 jdk oraclelinux7 as JDK RUN jlink no header files
  • 如何为动态搜索字符串创建索引

    我有一点数据库 仅用于学术目的 我最多有对象表 我在 Power Designer 中创建了一个实体关系模型 ERM 并且该程序默认为每个表的序列 ID 创建索引 我想知道如何使用索引 就像在查询中那样 说我会 想要通过 id 查找产品 但
  • 64 位环境中引用的大小

    在浏览 SO 上另一个问题的答复时遇到了这个 引用与变量获取 https stackoverflow com questions 3744635 c is it a good idea to always return references
  • iOS 10 中的 AVSpeechSynthesizer 错误

    我目前正在使用创建一个文本转语音应用程序AVSpeechSynthesizer 在 iOS 9 中运行正常 但在 iOS 10 中出现以下错误 无法获取属性 LocalURL 错误域 MobileAssetError Code 1 无法复制
  • Escape(\) 字符背后的魔力是什么

    C C 编译器如何操作源代码中的转义字符 编译器语法是如何编写来处理该字符的 编译器遇到该字符后会做什么 大多数编译器分为几个部分 编译器前端称为词法分析器 http en wikipedia org wiki Lexical analyz
  • 在 jdk 11 中运行 Doclet 的 com.sun.tools.javadoc.Main.execute 的替代方案是什么?

    我在 Apache netbeans 10 上使用 JDK 11 The main该方法自 java 9 起已被弃用 并标记为删除 如果没有 选择 https docs oracle com en java javase 11 docs a
  • 如何对 SQL 存储过程的 col 结果求和[重复]

    这个问题在这里已经有答案了 我有一个存储过程 其结果如下 Governors AUTO 07313570121 1 3 69 2 01 2 01 1 68 83 58 Governors AUTO 07319354850 1 2 79 1
  • 如何根据风格更改 Flutter 应用程序名称?

    我有 Flutter 应用程序的开发和生产风格 问题是开发和生产应用程序的标签和启动器是相同的 因此看不到差异 实际上不能同时在设备上安装两者 根据风格更改 Flutter 应用程序名称的简单方法是什么 我知道可以通过修改 AndroidM
  • 需要使用油脂猴脚本点击出价按钮

    我有点卡住了 我正在尝试创建一个油脂猴脚本 该脚本将自动单击拍卖网站上出现的弹出窗口 我有 Xpat 但我对 GM 的经验太丰富 无法让它发挥作用 这是我从 fire finder for firebug 获得的元素检查线
  • Sublime Text 中的边界敏感 Cmd+D

    我在 OSX 上使用 Sublime Text 3 Using cmd D I want to select the next instance of es but not if it s part of another word 鉴于此代
  • 如何从 Google App Engine for Java 调用 Google App 脚本

    我有一个谷歌应用程序脚本 我想从 Google App Engine for Java 调用它 有人可以指导如何调用这样的脚本吗 我试着用谷歌搜索这个 但只找到了很多关于如何进行相反操作的信息 请指教 6个月前我也有同样的问题 我可以使用脚
  • 缩短本地 jekyll 服务器的页面生成时间

    跑步时jekyll server 整个站点被重建 在足够大的站点上 这需要非常长的时间 即使与 auto标志 这应该会阻止整个站点重新生成 但完成时间相当长 对我来说 10 多秒 据报道对某些人来说需要几分钟 这在编辑和预览单个页面时很不方
  • NDK:libm 静态链接

    我在尝试使用最新的 android 9 x86 平台编译源代码时遇到问题 主要问题 为什么是静态库libm a和动态的libm so是不同的 问题是我尝试编译 path to android ndk r8 toolchains x86 4
  • 数据类型不一致:预期的 NUMBER 变为 BINARY

    我是 Hibernate 新手 我正在尝试对我创建的 Oracle 数据库进行 简单 用户插入 我使用 Netbeans Hibernate 向导创建了所有必需的文件 hibernate cfg xml hibernate reveng x
  • 如何在c#中向图标添加文本?

    我想在系统托盘中显示一个图标 ico 文件 并在运行时添加一些文本 有没有原生的 WPF 方法可以做到这一点 或 GDI 的片段也将不胜感激 谢谢 这是对我有用的代码 public static Icon GetIcon string te
  • 为什么使用 pandas apply 时会出现 KeyError?

    我正在参加 kaggle Outbrain 竞赛 我的代码中引用的所有数据集都可以在以下位置找到 https www kaggle com c outbrain click prediction data https www kaggle
  • 在C++中,向量函数push_back会增加空数组的大小吗?

    快问 假设我声明了一个大小为 20 的向量 然后我想使用 push back 添加一些整数 vector
  • 使用 RVM 安装 Ruby 2.0.0,配置错误

    我目前正在 Ruby 1 9 3p134 上运行 并尝试使用 RVM 安装 Ruby 2 0 0 但是我不断遇到以下错误 我在 OSX 10 7 5 上运行 运行 env LDFLAGS L opt sm pkg active lib 时出
  • 将整个 *ui 文件加载到另一个 *.ui 文件的框架/小部件中

    我正在为家庭项目开发一个小型用户界面 我使用 QT Designer 创建了一个 ui 文件 这是我的主窗口 带有一些导航按钮 标签等 现在 当我单击导航按钮时 我正在努力在主窗口的框架或小部件中加载另一个 ui 例如内容 我正在使用 py