首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个*.ui文件的框架/小部件中加载整个*ui文件

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

Stack Overflow用户
提问于 2018-12-22 20:50:00
回答 1查看 5.1K关注 0票数 2

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

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

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

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

代码语言:javascript
复制
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文件。还是没有框架/小部件的另一个好的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-26 00:40:57

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

代码语言:javascript
复制
├── 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中:

代码语言:javascript
复制
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打开的。

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

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

main.py

代码语言:javascript
复制
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_())

完整的示例是这里

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53899209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档