GUI startet nicht

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.
Sirius3
User
Beiträge: 17779
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich verstehe immer noch nicht, was eigentlich passieren soll. Du hast ein Fenster ListMovies, das zeigst Du an.
Soweit sollte das ja alles funktionieren.
Aber was soll statt dessen passieren?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das geht nicht, weil es eine komplette Anwendung ist. Qt kann nicht zwei laufende Anwendungen gleichzeitig haben, und Python allgemein nicht zwei eigenständige Skripte mit roher Gewalt zu einem schmieden. Das muss sauber in Funktionen und Klassen aufgeteilt werden, und die müssen aufgerufen werden.

Auch hier wieder völlig unnötige lokale Importe.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Ganz unten im Code wird normalerweise mittels »window.showdialog1()« eine Abfrage aufgerufen. Diese erscheint leider nicht beim Aufrufen über ein anderes Fenster.
Wenn ich diesen Aufruf in die Klasse, wo das Fenster definiert wird, packe, wird zwar die Abfrage gestartet, allerdings ohne das Fenster, in welchem der Arbeitsfortschritt angezeigt wird.
Sirius3
User
Beiträge: 17779
Registriert: Sonntag 21. Oktober 2012, 17:20

Zeig doch Deinen Code, den kompletten, der das Problem zeigt.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Okay.
Hauptfenster:

Code: Alles auswählen

import functions
import sys
import faulthandler

from PyQt5 import QtWidgets, QtCore, uic
from ListMovs import ListMovies

app = QtWidgets.QApplication(sys.argv)

class MediaVerwaltung(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()

        uic.loadUi("GUI\GUI_MediaVerwaltung.ui", self)

        self.pushButton_movies.clicked.connect(self.list_movies)
        self.pushButton_music.clicked.connect(self.list_music)
        self.pushButton_close.clicked.connect(self.end)

        # self.setWindowTitle("Media-Verwaltung") #unnötig, wenn Fenster ohne Titelleiste
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint) #Fenster ohne Titelleiste

        fensterbreite = self.width()
        fensterhoehe = self.height()

        self.setFixedWidth(fensterbreite)
        self.setFixedHeight(fensterhoehe)

        xy = functions.center_window(self, fensterbreite, fensterhoehe)
        self.move(int(xy[0]), int(xy[1]))

    def list_movies(self):
        self.window_movs = ListMovies()
        self.window_movs.show()

    def list_music(self):
        print("music")

    def end(self):
        exit()

if __name__ == '__main__':
    faulthandler.enable() #start @ the beginning

    window = MediaVerwaltung()
    window.show()

    sys.exit(app.exec_())
2. Fenster (soll mittels Button im Hauptfesnter aufgerufen werden → def list_movies(self)):

Code: Alles auswählen

import functions as fc
import os
import sys
import xlwt
import pandas as pd

from csv import reader, writer
from PyQt5 import QtWidgets, QtCore, uic
from PyQt5.QtWidgets import QMessageBox
from timer import Timer
from TraverseFolders import traverse_subfolders, traverse_folder
from Messages import inf, canc, no_link, csv_saved, xls_saved
from TableUpdate import before_update, update_table, after_update
from TableAdd import start_table_add

app = QtWidgets.QApplication([])

class ListMovies(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        uic.loadUi("GUI\GUI_Movies.ui", self)

        self.readAllMoviesButton.clicked.connect(self.on_read_all_entry)
        self.readMainMoviesButton.clicked.connect(self.on_read_main_entry)
        self.updateListButton.clicked.connect(self.on_update_list)
        self.addListButton.clicked.connect(self.on_add_list)
        self.newEntryButton.clicked.connect(self.on_new_entry)
        self.saveCsvButton.clicked.connect(self.on_save_csv)
        self.saveXlsButton.clicked.connect(self.on_save_xls)

        # self.actionSave.triggered.connect(self.on_save)

        self.moviesTable.itemDoubleClicked.connect(self.OpenLink)

        self.progressBar.hide()

        fensterbreite = self.width()
        fensterhoehe = self.height()

        # self.setFixedWidth(fensterbreite)
        # self.setFixedHeight(fensterhoehe)

        xy = fc.center_window(self, fensterbreite, fensterhoehe)
        self.move(int(xy[0]), int(xy[1]))

    def showdialog1(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Question)

        msg.setWindowTitle("Daten laden...")
        msg.setText("Dateien neu einlesen?")
        # msg.setInformativeText("This is additional information")
        # msg.setDetailedText("The details are as follows:")
        msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        msg.setDefaultButton(QMessageBox.No)
        msg.setEscapeButton(QMessageBox.Cancel)
        # msg.buttonClicked.connect(self.msgbtn)

        result = msg.exec_()

        if result == QMessageBox.Yes:
            self.showdialog2()
        else:
            self.read_csv_file("doks/movies.csv")
            # self.read_xls_file("doks/movies.xls")

    def showdialog2(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Question)

        msg.setWindowTitle("Verzeichnisse...")
        msg.setText("Auch Unterordner durchsuchen?")
        # msg.setInformativeText("This is additional information")
        # msg.setDetailedText("The details are as follows:")
        msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        msg.setDefaultButton(QMessageBox.No)
        msg.setEscapeButton(QMessageBox.Cancel)
        # msg.buttonClicked.connect(self.msgbtn)

        result = msg.exec_()

        stnrd_fldr = "D:/___ED/Eigene Videos"

        if result == QMessageBox.Yes:
            self.on_read_all_entry(stnrd_fldr)
        else:
            self.on_read_main_entry(stnrd_fldr)

    # def msgbtn(i):
    #     print("Button pressed is:", i)

if __name__ == '__main__':
    window = ListMovies()
    window.show()

    window.showdialog1()

    sys.exit(app.exec_())
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Ich habe die Lösung gerade selbst gefunden:
»self.showdialog1()« in die __init__ und davor »self.show()« und schon funktioniert es. Und »window.showdialog1()« muss weg.
Sirius3
User
Beiträge: 17779
Registriert: Sonntag 21. Oktober 2012, 17:20

Naja, das hatten wir hier ja schon mehrfach angesprochen, es darf nur eine QApplication geben, und Du hast zwei, zudem noch als globale Variablen.
Und das, was nach dem if __name__ kommt, muß jeweils in eine main-Funktion, von der natürlich nur eine aufgerufen werden darf.
Und damit ist auch klar, warum nichts passiert, weil durch das if __name__ == "__main__" nur das Hauptprogramm ausgeführt wird, und nicht, wenn die Datei als Modul eingebunden wird.
Dann ist komisch, dass das Hauptprogramm ein Dialog ist, und das Nebenfenster QMainWindow.
Dann sollte sich ein Fenster nicht selbst anzeigen und in __init__ sollten auch keine Langlaufenden
Dinge wie eine Messagebox angezeigt werden.
Antworten