我正在为一个家庭项目开发一个小型用户界面。我用QT设计器创建了一个*.ui文件。这是我的主窗口,有一些导航按钮,标签等等。现在,当我单击导航按钮时,我很难在主窗口的框架或小部件中加载另一个*.ui (例如,内容)。我正在使用pyqt4,我必须在raspberry pi上用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文件。还是没有框架/小部件的另一个好的解决方案?

发布于 2018-12-26 00:40:57
首先,我的解决方案的基础是推广一个小部件,为此,我将以以下方式构造该项目:
├── 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打开的。
然后,它将被提升为使用pages文件夹中的小部件:

然后,主要将按钮与适当的索引关联起来:
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_())完整的示例是这里。
https://stackoverflow.com/questions/53899209
复制相似问题