Seite 1 von 1

PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Donnerstag 9. August 2018, 20:53
von xXSkyWalkerXx1
Abend Leute, nach bissel weiterer Recherche hab ich nen Ansatz bezüglich QFrame.

Das ist mein Programm:

Code: Alles auswählen

########### Eigene CronusMax GamePack GUI (Graphical User Interface) ###########
# Importierung:
import sys, webbrowser
from PyQt5.QtWidgets import QApplication , QSplitter, QWidget, QMainWindow, QVBoxLayout, QAction, QFrame
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt

"""
ToDo:

"""

# Programm - Klasse
class ScriptGameInterface:
    def mainprocess(self):
        # Hauptfenster - QMainWindow:
         self.app = QApplication(sys.argv)
         self.mainwindow = QMainWindow()
         self.mainwindow.setGeometry(400,300,1100,540)
         self.mainwindow.setWindowTitle("xXSkyWalkerXx1 - Fortnite S.G.I. Tool")
         self.mainwindow.setWindowIcon(QIcon("/home/pi/Bilder/Ich/xXSkyWalkerXx1.jpg"))
         self.mainwindow.show()
         self.mainwindow.statusBar().showMessage("Fortnite Script.Game.Interface (S.G.I.) | V0.8")

        #Menü-Bar:
         menubar = self.mainwindow.menuBar()

         info = menubar.addMenu("Infos")
         update = menubar.addMenu("Update")
         shop = menubar.addMenu("Shop")
         generate = menubar.addMenu("Generate")
         exitMenu = menubar.addMenu("Exit")

         showAGB = QAction(QIcon("/home/pi/Bilder/AGB.jpg"), "TOS", self.mainwindow)
         showAGB.triggered.connect(self.showAGB)
         info.addAction(showAGB)
         
         openShopLink = QAction(QIcon("/home/pi/Bilder/selly.png"), "Shop", self.mainwindow)
         openShopLink.triggered.connect(self.openShop)
         shop.addAction(openShopLink)

         generateScript = QAction(QIcon("/home/pi/Bilder/generate.png"), "Generate", self.mainwindow)
         generateScript.triggered.connect(self.generate)
         generate.addAction(generateScript)

         ex = QAction(QIcon("/home/pi/Bilder/exit.jpg"), "Exit", self.mainwindow)
         ex.triggered.connect(self.Beenden)
         exitMenu.addAction(ex)

        # Frames/Layouts - QWidget:
         self.widgets = QWidget()
         
         self.vbox = QVBoxLayout()

         frameLeft = QFrame()
         frameLeft.setFrameShape(QFrame.StyledPanel)
         frameLeft.setStyleSheet("background-color:blue;")
         frameRight = QFrame()
         frameLeft.setStyleSheet("background-color:red;")
         frameRight.setFrameShape(QFrame.StyledPanel)

         splitter = QSplitter(Qt.Vertical)
         splitter.addWidget(frameLeft)
         splitter.addWidget(frameRight)

         self.vbox.addWidget(splitter)
         self.widgets.setLayout(self.vbox)
         
         self.widgets.show() #Widgets anzeigen 
         
    def Beenden(self):
        self.mainwindow.destroy()
        self.app.destroy()
        
    def check_updates(self):
        pass

    def openShop(self):
        webbrowser.open("https://selly.gg/@xXSkyWalkerXx1")
        
    def showAGB(self):
        webbrowser.open("https://www.dropbox.com/s/40giw67xmhjbhed/AGB.txt?dl=0")

    def generate(self):
        FortniteSkript = "In process!"
        script = open("/home/pi/Schreibtisch/Fortnite - GamePack.gpc", "w+")
        script.write(FortniteSkript)
        script.close()

# Hauptkörper - "main"
Interface = ScriptGameInterface()
Interface.mainprocess()
sys.exit(Interface.app.exec_())
Das Problem ist, dass ein neues Fenster erzeugt wird, in dem 2 Frames dargestellt werden, allerdings scheinbar horizontal statt vertikal und auch kein blaues.
Jemand ne Ahnung woran's liegt? :)

Ich hab ein Programm, in Tkinter geschrieben, welches ich nämlich nun in PyQt5 umschreiben möchte (aufgrund mehrerer Möglichkeiten) - habe aber noch nicht so viel Ahnung von PyQt5 und viel gibts da auch nicht zu lesen.
Tkinter war sooo leicht! :D

Mir freundlichen Grüßen,
xXSkyWalkerXx1

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Donnerstag 9. August 2018, 20:56
von __blackjack__
Es gibt die Qt-Dokumentation. Ich finde die recht umfangreich. Und gut.

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Donnerstag 9. August 2018, 21:03
von xXSkyWalkerXx1
Auf der Pythonseite direkt oder wo?
EDIT: oder meinst diese Seite: https://doc.qt.io/qtforpython/index.html ?

Und hast auch ne Ahnung was ich im Prog. falsch gemacht habe?

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Donnerstag 9. August 2018, 21:17
von __blackjack__
Ich meine die Original-Qt-Dokumentation für C++.

In welcher Zeile sagst Du denn das was im Hauptfenster angezeigt werden soll?

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Donnerstag 9. August 2018, 21:38
von xXSkyWalkerXx1
In welcher Zeile sagst Du denn das was im Hauptfenster angezeigt werden soll?

Code: Alles auswählen

########### Eigene CronusMax GamePack GUI (Graphical User Interface) ###########
# Importierung:
import sys, webbrowser
from PyQt5.QtWidgets import QApplication , QSplitter, QWidget, QMainWindow, QVBoxLayout, QAction, QFrame
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt

"""
ToDo:

"""

# Programm - Klasse
class ScriptGameInterface:
    def mainprocess(self):
        # Hauptfenster - QMainWindow:
         self.app = QApplication(sys.argv)
         self.mainwindow = QMainWindow()
         self.mainwindow.setGeometry(400,300,1100,540)
         self.mainwindow.setWindowTitle("xXSkyWalkerXx1 - Fortnite S.G.I. Tool")
         self.mainwindow.setWindowIcon(QIcon("/home/pi/Bilder/Ich/xXSkyWalkerXx1.jpg"))
         self.mainwindow.show()
         #---------------------------------------------------------------------------------------------------------------------------------- Aufruf von dem was dargestellt wird
         self.mainwindow.statusBar().showMessage("Fortnite Script.Game.Interface (S.G.I.) | V0.8")
         #----------------------------------------------------------------------------------------------------------------------------------
        #Menü-Bar: 
         menubar = self.mainwindow.menuBar()
         #---------------------------------------------------------------------------------------------------------------------------------- Aufruf von dem was dargestellt wird
         info = menubar.addMenu("Infos")
         update = menubar.addMenu("Update")
         shop = menubar.addMenu("Shop")
         generate = menubar.addMenu("Generate")
         exitMenu = menubar.addMenu("Exit")
         #---------------------------------------------------------------------------------------------------------------------------------- 
         showAGB = QAction(QIcon("/home/pi/Bilder/AGB.jpg"), "TOS", self.mainwindow)
         showAGB.triggered.connect(self.showAGB)
         info.addAction(showAGB)
         
         openShopLink = QAction(QIcon("/home/pi/Bilder/selly.png"), "Shop", self.mainwindow)
         openShopLink.triggered.connect(self.openShop)
         shop.addAction(openShopLink)

         generateScript = QAction(QIcon("/home/pi/Bilder/generate.png"), "Generate", self.mainwindow)
         generateScript.triggered.connect(self.generate)
         generate.addAction(generateScript)

         ex = QAction(QIcon("/home/pi/Bilder/exit.jpg"), "Exit", self.mainwindow)
         ex.triggered.connect(self.Beenden)
         exitMenu.addAction(ex)
        # Frames/Layouts - QWidget:
         self.widgets = QWidget()
         
         self.vbox = QVBoxLayout()

         frameLeft = QFrame()
         frameLeft.setFrameShape(QFrame.StyledPanel)
         frameLeft.setStyleSheet("background-color:blue;")
         frameRight = QFrame()
         frameLeft.setStyleSheet("background-color:red;")
         frameRight.setFrameShape(QFrame.StyledPanel)

         splitter = QSplitter(Qt.Vertical)
         splitter.addWidget(frameLeft)
         splitter.addWidget(frameRight)

         self.vbox.addWidget(splitter)
         self.widgets.setLayout(self.vbox)
         #---------------------------------------------------------------------------------------------------------------------------------- Aufruf von dem was dargestellt wird (Frames, vertikal geteilt) (naja, sollte^^)
         self.widgets.show() #Widgets anzeigen 
         #----------------------------------------------------------------------------------------------------------------------------------
    def Beenden(self):
        self.mainwindow.destroy()
        self.app.destroy()
        
    def check_updates(self):
        pass

    def openShop(self):
        webbrowser.open("https://selly.gg/@xXSkyWalkerXx1")
        
    def showAGB(self):
        webbrowser.open("https://www.dropbox.com/s/40giw67xmhjbhed/AGB.txt?dl=0")

    def generate(self):
        FortniteSkript = "In process!"
        script = open("/home/pi/Schreibtisch/Fortnite - GamePack.gpc", "w+")
        script.write(FortniteSkript)
        script.close()

# Hauptkörper - "main"
Interface = ScriptGameInterface()
Interface.mainprocess()
sys.exit(Interface.app.exec_())
Habe es direkt im Code markiert.
Sollte das Richtige sein, wenn ich dich richtig verstanden habe.

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Donnerstag 9. August 2018, 21:53
von __blackjack__
Dann hast Du das falsch verstanden. Du musst schon sagen was in dem Hauptfenster als zentrales Widget angezeigt werden soll, sonst weiss Qt nicht das Du da kein eigenes Fenster aus dem Inhalt machen willst. Schau Dir doch mal die Dokumentation von `QMainWindow` an.

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Samstag 11. August 2018, 19:55
von xXSkyWalkerXx1
Ich verstehe nicht ganz, aber wozu wird den ein zentrales Widget benötigt und wenn ich aber im Prinzip keine nehmen kann, da ich erstmal 2 Frames platzieren will, die das Fenster einteilen?
Ich habe schonmal wegen den anderen PyQt Widgets geschaut, das ist simple, aber mit den Frames checke ich das nicht und meiner Meinung nach findet man auch nichts, wo das relativ gut erklärt wird.

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Samstag 11. August 2018, 20:38
von __blackjack__
Ich verstehe die Frage nicht so ganz. An der Stelle wo das zentrale Widget im Hauptfenster sitzt, willst Du ja was anzeigen. *Du* brauchst da ja was. Ein (Haupt)Fenster ohne irgend etwas drin macht keinen Sinn. Wie kannst Du da fragen *warum* da etwas sein muss wenn Du doch etwas dort haben möchtest‽

Wenn Du den zentralen Bereich einteilen möchtest, musst Du dort halt ein Widget reinsetzen das Du dann einteilst. Also letztlich genau das was Du ja schon machst, ausser das Du halt nicht sagst es soll in das Hauptfenster gesetzt werden. Da Du das nicht sagst, hat das Widget kein Elternwidget und Widgets ohne Eltern sind in Qt Fenster.

Re: PyQt5 - QWidgets & QMainWindow gleichzeitig verwenden?

Verfasst: Dienstag 14. August 2018, 17:02
von xXSkyWalkerXx1
Dankee! :)) Habs jetzt! ^^
Hab Frame als ZentralWidget gesetzt und es ging! :)