Funktion einer Klasse wird nicht aufgerufen, obwohl sie funzt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 17:28

Abend Leutchen,

Nachdem ich versucht habe das Problem selbst zu lösen und ich auch Morpheu's Discordcommunity gefragt habe, aber da auch keiner was gefunden hat,
wende ich mich nun an die Pythoncommunity. ^^
Das gleiche Problem hatte ich schonmal in einem anderen Programm & konnte es da lösen, doch hier finde ich den Fehler nicht erneut.

Zum Problem:
Das Fenster (Funktion "verify") der Klasse "Login" an sich funktioniert & und das Fenster (Funktion "ui") der Klasse "Interface" an sich funktioniert (über direkten Aufruf außerhalb der Klassen getestet).
Das Problem ist, dass das Fenster der Klasse "Interface" beim Aufruf aus der Funktion der ersten Klasse nicht angezeigt/erzeugt wird, allerdings aufgerufen, da die Musik abgespielt wird.

Code: Alles auswählen

from PySide2.QtWidgets import QApplication , QMainWindow, QGridLayout, QHBoxLayout, QSplitter, QAction, QFrame, QPushButton, QLabel, QLineEdit, QComboBox, QMessageBox
from PySide2.QtGui import QIcon, QPixmap
from PySide2.QtCore import Qt
import sys,os,winsound
from twilio.rest import Client


class Login(QMainWindow):
    def verify_window(self):
        self.setGeometry(400,500,360,270)
        self.setWindowTitle("CRONUSMAX EXCLUSIVE [VIP]")
        self.setWindowIcon(QIcon("fortnite_img2.png"))
        self.setFixedSize(360,270)

        self.label1 = QLabel("<b><u>CronusMax Login</u><b>")
        self.label_un = QLabel("Username:")
        self.input_un = QLineEdit()
        self.label_pw = QLabel("Password:")
        self.input_pw = QLineEdit()
        self.label_why_reg = QLabel(">Why is a login needed?< So only ppl of CronusMax can it. :)")
        self.label_reg = QLabel('<a href=\"https://cronusmax.com/forums"> <font face= luckiestguy bold size=4 color=blue> Create new account</font> </a>')
        self.submit_btn = QPushButton("L O G I N")

        self.frame = QFrame()
        self.layout = QHBoxLayout()
        self.splitter = QSplitter(Qt.Vertical)
        self.layout.addWidget(self.splitter)
        
        for w in [self.label1,self.label_un,self.input_un,self.label_pw,self.input_pw,self.label_why_reg,self.label_reg,self.submit_btn]:
            self.splitter.addWidget(w)

        self.label1.setAlignment(Qt.AlignCenter)
        self.input_un.setStyleSheet('border: 1px solid; border-color:grey; border-radius: 6px;')
        self.input_pw.setStyleSheet('border: 1px solid; border-color:grey; border-radius: 6px;')
        self.input_pw.setEchoMode(QLineEdit.Password)
        self.label_reg.setOpenExternalLinks(True)
        self.label1.setStyleSheet('font-size: 24px; font-family: luckiestguy bold;')
        self.submit_btn.clicked.connect(self.login)

        self.setCentralWidget(self.frame)
        self.frame.setLayout(self.layout)
        self.show()
        winsound.PlaySound('SystemExclamation', winsound.SND_ASYNC)

    def login(self):
        username = self.input_un.text()
        password = self.input_pw.text()
        account_sid = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
        auth_token = 'xxxxxxxxxxxxxxxxxxxxxxxxx'

        if username is not "" and password is not "":
            #client = Client(account_sid, auth_token)

            #message = client.messages.create(
                              #from_= 'whatsapp:+xxxxxxxxx',
                              #body = 'Login war erfolgreich!',
                              #to = 'whatsapp:+xxxxxxxxxx'
                          #)
            self.destroy()
            Interface().ui(username)
        else:
            self.statusBar().showMessage("You have forgott to enter something...")

        

class Interface(QMainWindow): 
    def ui(self,username):
        self.setGeometry(400,500,450,280)
        self.setWindowTitle("CRONUSMAX EXCLUSIVE **FORTNITE S.G.I** [VIP]")
        self.setWindowIcon(QIcon("fortnite_img2.png"))
        self.setFixedSize(500,280)
        self.statusbar = self.statusBar()
        self.statusbar.setStyleSheet('font: bold; color: yellow;')
        self.statusbar.showMessage("[ Programversion: 1.00 | Username: "+username+" | Game: Fortnite ]")
        
        self.menubar = self.menuBar()
        credit = self.menubar.addMenu("Credits")
        generate = self.menubar.addMenu("Generate")
        music = self.menubar.addMenu("Music")
        _exit = self.menubar.addMenu("Exit")
        c = QAction(QIcon("programmer.png"),"Programmer",self)
        c.triggered.connect(self.show_credits)
        credit.addAction(c)
        g = QAction(QIcon("generate.png"),"Script",self)
        g.triggered.connect(self.generate_script)
        generate.addAction(g)
        m1 = QAction(QIcon("music_on.png"),"Turn On",self)
        m1.triggered.connect(lambda: winsound.PlaySound("theme.wav",winsound.SND_ASYNC | winsound.SND_LOOP))
        music.addAction(m1)
        m2 = QAction(QIcon("music_off.png"),"Turn Off",self)
        m2.triggered.connect(lambda: winsound.PlaySound(None,winsound.SND_ASYNC))
        music.addAction(m2)
        e = QAction(QIcon("exit.png"),"Exit",self)
        e.triggered.connect(self.exit_app)
        _exit.addAction(e)

        self.label1 = QLabel("<b> AimAbuse:</b>")
        self.label2 = QLabel("<b> RapidFire:</b>")
        self.label3 = QLabel("<b> NoRecoil:</b>")
        self.label4 = QLabel("<b> AutoRun:</b>")
        self.cb1 = QComboBox()
        self.cb2 = QComboBox()
        self.cb3 = QComboBox()
        self.cb4 = QComboBox()
        self.le1 = QLineEdit()
        self.le2 = QLineEdit()
        self.le3 = QLineEdit()
        self.le4 = QLineEdit()
        self.le5 = QLineEdit()
        self.frame = QFrame()

        self.setStyleSheet('QMainWindow {border-image: url("bg3.jpg");}')
        self.frame.setStyleSheet('background: transparent;') 
        self.le1.setPlaceholderText("Zoom - In value [int]")
        self.le2.setPlaceholderText("Zoom - Out value [int]")
        self.le3.setPlaceholderText("fire-rate [int]")
        self.le4.setPlaceholderText("value for slow guns [int]")
        self.le5.setPlaceholderText("value for fast guns [int]")

        for l in [self.label1,self.label2,self.label3,self.label4]:
            l.setStyleSheet('background-color: yellow;')
        for w in [self.le1,self.le2,self.le3,self.le4,self.le5,self.cb1,self.cb2,self.cb3,self.cb4]:
            w.setStyleSheet('background-color: light grey;')
        for i in [self.cb1,self.cb2,self.cb3,self.cb4]:
            i.addItem(QIcon("mod_off.png"),"OFF")
            i.addItem(QIcon("mod_on.png"),"ON")

        self.layout = QGridLayout()
        self.layout.addWidget(self.label1,0,0)
        self.layout.addWidget(self.cb1,   0,1)
        self.layout.addWidget(self.le1,   0,2)
        self.layout.addWidget(self.le2,   0,3)
        self.layout.addWidget(self.label2,1,0)
        self.layout.addWidget(self.cb2,   1,1)
        self.layout.addWidget(self.le3,   1,2)
        self.layout.addWidget(self.label3,2,0)
        self.layout.addWidget(self.cb3,   2,1)
        self.layout.addWidget(self.le4,   2,2)
        self.layout.addWidget(self.le5,   2,3)
        self.layout.addWidget(self.label4,3,0)
        self.layout.addWidget(self.cb4,   3,1)
        self.layout.setContentsMargins(10,0,10,0)
        
        self.setCentralWidget(self.frame)
        self.frame.setLayout(self.layout)
        self.show()
        winsound.PlaySound("theme.wav",winsound.SND_ASYNC | winsound.SND_LOOP)
        
    def show_credits(self):
        self.mb = QMessageBox()
        self.mb.setWindowTitle("Owner of this programm")
        self.mb.setWindowIcon(QIcon("programmer.png"))
        self.mb.setText("CopyRight© 2019 - 2020, nostradamus - all rights reserved!\n\nSelling this program is against the laws and will punished.\nIt's written in PySide2 - LGPL licence.")
        self.mb.setStandardButtons(QMessageBox.Ok)
        self.mb.setIconPixmap(QPixmap("programmer.png").scaledToHeight(55))
        self.mb.exec_()
        
    def generate_script(self):
        with open(os.path.expanduser('~')+'\Desktop\nostradamus_fortnite[script].gpc',"w",encoding="utf-8") as script_file:
            script_file.write("<GPC CODE>")
    
    def exit_app(self):
        winsound.PlaySound('SystemExit',winsound.SND_ASYNC)
        self.destroy()
        app.quit()



app = QApplication(sys.argv)
start = Login()
start.verify_window()
sys.exit(app.exec_())

#EDITED
Als ich schonmal das Problem hatte konnte ich das Problem lösen - wie auch immer.
Da war es auch nur ein minimaler Fehler, wenn ich doch nur wüsste was es für einer war. :I

Grüße,
xXSkyWalkerXx1
Zuletzt geändert von xXSkyWalkerXx1 am Montag 13. Mai 2019, 17:41, insgesamt 2-mal geändert.
__deets__
User
Beiträge: 6062
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 13. Mai 2019, 17:37

Ui. Ganz schön hässlich. Wieso du Labels etc durchnummerierst, statt Ihnen sinnvolle Namen ihres Zweckes nach zu geben ist mir schleierhaft.

Und die Variable für Interface groß I zu nennen ist auch ungewöhnlich. Variablen schreibt man klein.

Last but not least: du erzeugst ein Widget, ohne es entweder an self zu binden. Oder ein Parent zu übergeben. Womit es prompt als Müll wieder abgeräumt wird.
Sirius3
User
Beiträge: 10241
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 13. Mai 2019, 17:43

@xXSkyWalkerXx1: das sieht alles sowas von falsch aus. Es macht keinen Sinn, alle mögliche Labels an self zu binden, oder die GUI nicht über .ui-Datein in __init__ aufzubauen.
Auch dass eine Methode login ein weitere Fenster-Instanz erzeugt, die aber gleich wegschmeißt.
Strings per ›is‹ zu vergleichen ist falsch.
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 17:48

Sirius3 hat geschrieben:
Montag 13. Mai 2019, 17:43
@xXSkyWalkerXx1: das sieht alles sowas von falsch aus. Es macht keinen Sinn, alle mögliche Labels an self zu binden, oder die GUI nicht über .ui-Datein in __init__ aufzubauen.
Auch dass eine Methode login ein weitere Fenster-Instanz erzeugt, die aber gleich wegschmeißt.
Strings per ›is‹ zu vergleichen ist falsch.
Hab mich zum Vergleich nochmal belesen. Ich weiß, dass es aus GPC das "=!" gibt und da diese Sprache C# sehr nahe sein soll, hatte ich das bei Python probiert - ging ni, also dachte ich man macht es mit "is not".
Okay, jetzt weiß ich, dass man es mit "!=" machen kann - danke!

Meinst mit
oder die GUI nicht über .ui-Datein in __init__ aufzubauen
, dass ich die Widgets in der "__init__" erzeugen soll und in "verify_window" bloß platzieren soll?
Zuletzt geändert von xXSkyWalkerXx1 am Montag 13. Mai 2019, 17:59, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 6062
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 13. Mai 2019, 17:54

Es gibt auch in C++ kein =! Auch da ist das !=.
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 17:58

Ups, meinte GPC und ni C++.
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 18:06

Und woran kann's nun liegen, dass es das 2. Fenster nicht öffnet?
__deets__
User
Beiträge: 6062
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 13. Mai 2019, 18:08

Habe ich dir doch beantwortet.
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 18:12

Ach, wegen dem Widget was wegfällt, da ich es nicht an self gebunden habe?
Aber welches Widget meinst? Z.B.

Code: Alles auswählen

 credit = self.menubar.addMenu("Credits") 
oder welches?
__deets__
User
Beiträge: 6062
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 13. Mai 2019, 18:14

Nein. Interface. Das ist doch das, das nicht da bleibt?
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 18:17

Ach du Scheiße - na klar!!! -.-
Hm, kleiner Fehler, große Wirkung.

Hier meckert ja immer so über meine Syntaxschreibweise - da muss ich jetzt Mal nach Tips fragen, um es normengerecht zu schreiben.
__deets__
User
Beiträge: 6062
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 13. Mai 2019, 18:18

Wird hier permanent erwähnt: PEP8. Dazu gibt es sogar checker die das in deiner IDE automatisch prüfen.
Benutzeravatar
__blackjack__
User
Beiträge: 3896
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 13. Mai 2019, 18:25

Nur mal als kleine Demonstration warum ``is`` der falsche Operator ist:

Code: Alles auswählen

In [173]: a
Out[173]: 'parrot'

In [174]: b
Out[174]: 'parrot'

In [175]: a is b
Out[175]: False

In [176]: a == b
Out[176]: True
Objekte können den gleichen Wert haben, ohne tatsächlich das selbe Objekt zu sein.
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
xXSkyWalkerXx1
User
Beiträge: 289
Registriert: Mittwoch 27. Juni 2018, 17:39

Montag 13. Mai 2019, 18:58

Okay, ich schau mir Mal so ein PEP8-Guide an.

Mal 'ne andere Frage, welches Modul brauche ich, um die Funktion "login" aufzurufen und während dessen das Fenster laufen zu lassen - Threading oder MultiProcessing?
__deets__
User
Beiträge: 6062
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 13. Mai 2019, 19:02

Weder noch. Was soll denn gehen, während man nicht eingeloggt ist? Und was daran geht nicht? Die kannst ja tausende Widgets darstellen und benutzen - Fokus hat halt immer nur eines. Ob das sinnvoll ist von der Benutzerinteraktion steht auf nem anderen Blatt.
Antworten