Создание логики приложения с помощью PyQt и Panda3D - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть три отдельных скрипта, которые я пытаюсь собрать вместе как простое приложение.Я хочу иметь возможность щелкнуть кнопку в QMainWindow и изменить текущее отображение на окно Panda3D, вложенное в виджет PyQt, с наложенной на него одной кнопкой.

У меня работают все отдельные сценарии, но яне знаю, как их собрать.Как изменить отображение главного окна в приложении, перейти к другим виджетам и т. Д.

#MAIN WINDOW

import sys
import PyQt5
from PyQt5.QtWidgets import (QMainWindow, QWidget, QToolTip, QPushButton, 
QApplication,
QHBoxLayout, QVBoxLayout)

app = QApplication(sys.argv)
screenres = app.desktop().screenGeometry()
scrW, scrH = screenres.width(), screenres.height()
width = 500
height = 500

#########################################################

class MainWindow(QMainWindow):

    def __init__(self):

        super().__init__()

        self.initHomeScreen()

#-----------------------------------------------------------

    def setWindow(self):

        self.setGeometry((scrW - width)/2, (scrH - height)/2, width, height) 
        #(xpos, ypos, width, height)
        self.setWindowTitle("Dragon's World")

#-----------------------------------------------------------

    def initHomeScreen(self):

        self.setWindow()

        #____________BUTTONS

        #The quit button
        btnW = (width *.15)
        btnH = (height *.05)

        quitbtn = QPushButton('Quit', self) #self stands for the parent 
        widget, in this case the application object
        quitbtn.resize(btnW, btnH)
        quitbtn.clicked.connect(QApplication.instance().quit)

        #Load game button
        loadbtn = QPushButton('Load Game', self)
        loadbtn.resize(btnW, btnH)
        #loadscrn = MainWindow.initLoadScreen()
        #loadbtn.clicked.connect(loadscrn)

        #____________LAYOUTS

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(loadbtn)
        hbox.addWidget(quitbtn)
        hbox.addStretch(1)

        vbox = QVBoxLayout()
        vbox.addStretch(4)
        vbox.addLayout(hbox)
        vbox.addStretch(1)

        #_____________

        homewidg = QWidget()
        homewidg.setLayout(vbox)

        self.setCentralWidget(homewidg)
        self.show()

#------------------------------------------------------------

    def initLoadScreen(self):

        pass


##########################################################

if __name__ == '__main__':

    window = MainWindow()
    sys.exit(app.exec_())


#PANDA 3D WINDOW

from direct.showbase.ShowBase import ShowBase

class MyApp(ShowBase):

    def __init__(self):
        ShowBase.__init__(self)

        # Load the environment model.
        self.scene = self.loader.loadModel("models/environment")
        # Reparent the model to render.
        self.scene.reparentTo(self.render)
        # Apply scale and position transforms on the model.
        self.scene.setScale(0.25, 0.25, 0.25)
        self.scene.setPos(-8, 42, 0)

app = MyApp()
app.run()


#GUI IMPOSED ON PANDA3D

import PyQt5
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, 
QHBoxLayout

import sys

app = QApplication(sys.argv)

####################################################

class GameScreen(QWidget):

    def __init__(self):

        super().__init__()

        self.initHomeButton()

        self.show()

#-------------------------------------------

    def initHomeButton(self):

        homebtn = QPushButton('Home')
        homebtn.resize(100, 25)

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(homebtn)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

#####################################################

if __name__ == '__main__':

    window = GameScreen()
    sys.exit(app.exec_())
...