【发布时间】:2018-01-19 07:19:50
【问题描述】:
我有一个多窗口 PyQt5(Python 3.6.2 和 Qt 5.9.0)应用程序,在标准桌面(即窗口管理)环境中运行时可以完美运行。我的目标平台是嵌入式设备(例如 Raspberry Pi、i.MX6 等),我不会在其中使用 X11 窗口系统。我目前正在使用不支持多个窗口的 eglfs 平台测试嵌入式设备。我正在考虑使用 QtWayland 平台,或者修改我的方法以使用 QtStackedWidget 将“窗口”作为单独的页面包含在堆栈中。
如何修改以下高级窗口应用程序以利用 QStackedWidget 排列,以促进无窗口环境中的多页应用程序?
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui_Main import Ui_Main
from ui_Window1 import Ui_Window1
from ui_Window2 import Ui_Window2
class Main(QMainWindow, Ui_Main):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.setupUi(self)
#Initialisation functions
self.PushButton1.clicked.connect(self.OpenWindow1)
self.PushButton2.clicked.connect(self.OpenWindow2)
def OpenWindow1(self):
showWindow1.show()
def OpenWindow2(self):
showWindow2.show()
class Window1(QMainWindow, Ui_Window1):
def __init__(self, parent=None):
super(Window1, self).__init__(parent)
self.setupUi(self)
class Window2(QMainWindow, Ui_Window2):
def __init__(self, parent=None):
super(Window2, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
showMain = Main()
showWindow1 = Window1()
showWindow2 = Window2()
showMain.show()
app.exec_()
【问题讨论】:
-
不熟悉eglfs平台,但是QStackedWidget并不是特别难用。您是否尝试过仅使用它?这一切都取决于您到底想要实现什么,但总的来说应该是可行的。您应该指定多页应用程序的含义。在单个窗口中实现多页应用程序的一种方法是使用 QWizard。
-
我不知道 QWizard,所以感谢您指出这一点。我发布的示例代码代表了我正在尝试实现的基本多页面配置,其中您有一个在应用程序启动时显示的主页,以及多个导入的外部 .py 文件,这些文件显示在主页面的顶部窗户。我希望仍然能够导入这些外部 .py 文件,但将它们嵌套在主窗口中。
-
我对此进行了更多思考,并以上述示例代码为例。我想我需要创建一个 ui_Main.py 文件,其中包含所有“windows”的所有 setupUi,然后有一个类 Main()。
标签: python qt pyqt pyqt5 qstackedwidget