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.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Hallo Gemeinde,

ich habe eine GUI in Qt Designer erstellt. Wenn ich die GUI direkt starte, klappt das. Beim Aufruf durch ein extra Modul mit Funktionen dagegen nicht. Warum?

Code der GUI:

Code: Alles auswählen

from PyQt6 import QtCore, QtGui, QtWidgets

class Ui_MediaVerwaltung(object):
    def setupUi(self, MediaVerwaltung):
        MediaVerwaltung.setObjectName("MediaVerwaltung")
        MediaVerwaltung.resize(630, 380)
        self.pushButton_movies = QtWidgets.QPushButton(parent=MediaVerwaltung)
        self.pushButton_movies.setGeometry(QtCore.QRect(10, 10, 300, 300))
        self.pushButton_movies.setObjectName("pushButton_movies")
        self.pushButton_music = QtWidgets.QPushButton(parent=MediaVerwaltung)
        self.pushButton_music.setGeometry(QtCore.QRect(320, 10, 300, 300))
        self.pushButton_music.setObjectName("pushButton_music")
        self.pushButton_close = QtWidgets.QPushButton(parent=MediaVerwaltung)
        self.pushButton_close.setGeometry(QtCore.QRect(10, 320, 610, 50))
        font = QtGui.QFont()
        font.setFamily("MS Shell Dlg 2")
        font.setPointSize(25)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_close.setFont(font)
        self.pushButton_close.setObjectName("pushButton_close")

        self.retranslateUi(MediaVerwaltung)
        QtCore.QMetaObject.connectSlotsByName(MediaVerwaltung)

    def retranslateUi(self, MediaVerwaltung):
        _translate = QtCore.QCoreApplication.translate
        MediaVerwaltung.setWindowTitle(_translate("MediaVerwaltung", "MediaVerwaltung"))
        self.pushButton_movies.setText(_translate("MediaVerwaltung", "list movies"))
        self.pushButton_music.setText(_translate("MediaVerwaltung", "list music"))
        self.pushButton_close.setText(_translate("MediaVerwaltung", "BEENDEN"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MediaVerwaltung = QtWidgets.QDialog()
    ui = Ui_MediaVerwaltung()
    ui.setupUi(MediaVerwaltung)
    MediaVerwaltung.show()
    sys.exit(app.exec())
Funktions-Code:

Code: Alles auswählen

from tkinter import Tk, sys

from qtpy import QtWidgets, QtCore

import functions
from Messages import canc
from ui.GUI_MediaVerwaltung import Ui_MediaVerwaltung

app = QtWidgets.QApplication(sys.argv)


class MediaVerwaltung(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.ui = Ui_MediaVerwaltung()
        self.ui.setupUi(self)

        self.setWindowTitle("Media-Verwaltung")

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

        fensterbreite = 630
        fensterhoehe = 380
        self.setFixedWidth(fensterbreite)
        self.setFixedHeight(fensterhoehe)

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

    def start_app(self):
        root = Tk()
        root.withdraw() # 2. (inaktives) Fenster unterdrücken
        root.update()

        # w = 300
        # h = 50
        # x, y = functions.center_window(self, w, h)
        # root.geometry('%dx%d+%d+%d' % (w, h, x, y))

    def list_movies(self):
        print('movies')

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

    def end(self):
        canc()


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

    window.start_app()

    sys.exit(app.exec_())
Fehlermeldungen:
Traceback (most recent call last):
File "D:\__Sicherungsdaten\_Programmiersprachen\PycharmProjects\MovieCDList\MediaVerwaltung.py", line 54, in <module>
window = MediaVerwaltung()
File "D:\__Sicherungsdaten\_Programmiersprachen\PycharmProjects\MovieCDList\MediaVerwaltung.py", line 17, in __init__
self.ui.setupUi(self)
File "D:\__Sicherungsdaten\_Programmiersprachen\PycharmProjects\MovieCDList\ui\GUI_MediaVerwaltung.py", line 15, in setupUi
self.pushButton_movies = QtWidgets.QPushButton(parent=MediaVerwaltung)
TypeError: arguments did not match any overloaded call:
QPushButton(parent: Optional[QWidget] = None): argument 'parent' has unexpected type 'MediaVerwaltung'
QPushButton(text: Optional[str], parent: Optional[QWidget] = None): not enough arguments
QPushButton(icon: QIcon, text: Optional[str], parent: Optional[QWidget] = None): not enough arguments

Process finished with exit code 1


Ich hoffe jemand findet den Fehler.

VG aus dem Süd-Westen Deutschlands
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Tkinter und Qt mischen ist fuer den Anfang schonmal ein absolutes no-go. Du kannst nur eines von beiden verwenden. Und dann verwendest du mal qtpy, mal PyQt6. Ich kann nur raten, aber vermute dadurch mischst du auch noch PySide mit PyQt. Also alles auf *ein* Toolkit aufbauen.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Nach dem Umbau funktioniert es jetzt. Danke!
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Jetzt habe ich ein anderes Problem:
Ich würde gerne mittels Button in diesem Fenster ein anderes Fenster aufrufen. Den Code dazu habe ich ergänzt:

Code: Alles auswählen

    def list_movies(self):
        print('movies')

        import tkinter as tk

        parent = tk.Tk()
        parent.title("Parent")

        parent.update_idletasks()

        # def closer(event):
        #     parent.destroy()

        parent.bind("<Escape>", closer)

        parent.mainloop()
Dies erstellt ein neues Fenster.
Wie muss der Code aussehen, damit ein Fenster aus einer anderen Datei / Klasse geöffnet wird? Habe dazu leider nichts im Netz gefunden, nur eben das Öffnen von einem neuen Fenster.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist doch schon wieder Tk. Das. Geht. Nicht.
Benutzeravatar
grubenfox
User
Beiträge: 433
Registriert: Freitag 2. Dezember 2022, 15:49

und zweimal

Code: Alles auswählen

tk.Tk()
in einem Programm geht IMHO auch nicht...
(ich gehe hier davon aus dass das Programm komplett nur unter Tk läuft)
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Was muss denn in die Def, damit ein Fenster aus einer anderen Datei / Klasse geöffnet werden kann?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

In die Funktion muss die Instantierung der entsprechenden Klasse. Wie sonst auch, ob die nun aus Qt direkt kommt, oder einem anderen Modul, hat doch keinen Einfluss. Dein Code ganz oben zeigt doch auch ganz offensichlich den Import einer Klasse aus einem Modul, und wie man es benutzt. Was daran ist unklar? Angeblich ging es doch schon.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Naja ich habe einiges versucht, um die benötigte Klasse zu instanzieren. Ich bin allerdings (noch blutiger) Anfänger und habe das bisher leider nicht hinbekommen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne Code zu sehen, und ohne konkrete Fehlermeldungen, kann man dazu nichts sagen. Probiert haben kannst du ja quasi undendlich viel, das ist recht schwer zu erraten. Wenn die Aufteilung auf mehrere Dateien dich ueberfordert, dann begnueg dich doch mit einer. Ist zwar vielleicht etwas unuebersichtlicher, aber wenn es sonst nicht geht, hilft ja alle Uebersichtlichkeit der Welt nihct.
Benutzeravatar
__blackjack__
User
Beiträge: 13124
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@KlaRo: Um aus einer Klasse ein Objekt zu erzeugen muss man die Klasse aufrufen. Das gehört zu den Grundlagen. Und die sollte man IMHO erst einmal lernen bevor man mit GUIs anfängt. Denn für eine GUI muss man so ziemlich alles können, von Funktionen bis objekorientierter Programmierung. Und dann kommt bei GUIs noch ereignisbasierte Programmierung hinzu. Es ist einfacher wenn man die Sachen einzeln, aufeinander aufbauend lernt, statt gleich mit etwas einzusteigen wo man gleich alles auf einmal kennen und können muss.

Die GUI benutzt keine Layouts, sondern absolute Grössen und Positionen in Pixeln, gemischt mit Schriftgrössen in „point“. Das funktioniert nicht. Beziehungsweise nur bei Systemen mit ähnlichen Bildschirmgrössen, -auflösungen, und -einstellungen. Bei der heutigen Bandbreite was diese Werte/Eigenschaften angeht, sollte man solche harten vorgaben nicht machen. Im besten Fall sieht es komisch aus, im schlechtesten Fall ist die GUI nicht bedienbar wenn die Inhalte nicht in die Pixelvorgaben passen.

Auch so etwas wie zentrieren von Fenstern sollte man nicht machen. Es gibt Leute die haben zwei Monitore nebeneinander als *einen* Desktop konfiguriert. Bei denen landet das dann je zur Hälfte auf den Monitoren. Für das platzieren eines neuen Fensters ist die Fensterverwaltung des Systems verantwortlich. Die hat eine wesentlich bessere Übersicht wie alles angeordnet ist, und wo Platz ist.

Man generiert normalerweise keinen Code aus der *.ui-Datei aus dem Designer, sondern lädt diese Datei zur Laufzeit zum Beispiel mit dem `PyQt6.uic`-Modul wenn man PyQt als Anbindung an Qt verwendet.

`sys` importiert man nicht aus `tkinter`. Das ist nicht garantiert das `tkinter` das seinerseits importiert.

Modulnamen werden per Konvention klein_mit_unterstrichen geschrieben. Das es `functions`, `ui`, und `Messages` gibt, deutet darauf hin, dass da einzelne Module irgendwo herum liegen: die sollte man in einem Package zusammenfassen, damit nur *ein* Name in ”Konkurrenz” zu anderen installierten Modulen und Packages steht.

`functions` ist kein sinnvoller Modulname, weil das „Funktionen“ kein sinnvolles Ordnungskriterium ist. Der Name eines Moduls sollte dem Leser vermitteln was der Inhalt *bedeutet*, nicht dass da nur Objekte von einem bestimmten Typ (Funktionen) drin sind.

`canc()` ist kein guter Funktionsname. Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen.

`app` gehört nicht auf Modulebene, und auch alles was im ``if __name__ == …``-Zweig steht, sollte in einer Funktion verschwinden, die üblicherweise `main()` heisst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

__deets__ hat geschrieben: Dienstag 6. Februar 2024, 17:33 Ohne Code zu sehen, und ohne konkrete Fehlermeldungen, kann man dazu nichts sagen. Probiert haben kannst du ja quasi undendlich viel, das ist recht schwer zu erraten. Wenn die Aufteilung auf mehrere Dateien dich ueberfordert, dann begnueg dich doch mit einer. Ist zwar vielleicht etwas unuebersichtlicher, aber wenn es sonst nicht geht, hilft ja alle Uebersichtlichkeit der Welt nihct.
Mittels »def start_app(self):« soll folgendes Fenster geladen werden:

Code: Alles auswählen

class ListMovies(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle("Videodateienliste")

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

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

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

        self.ui.progressBar.hide()

        fensterbreite = 1500
        fensterhoehe = 1000
        self.setFixedWidth(fensterbreite)
        self.setFixedHeight(fensterhoehe)

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

    def start_app(self):
        root = Tk()
        root.withdraw() # 2. (inaktives) Fenster unterdrücken
        root.update()
        root.resizable(False, False)  # This code helps to disable windows from resizing

        from tkinter.messagebox import askquestion
        result = askquestion("Daten laden...", "Dateien neu einlesen?", default="no")
        if result == 'yes':
            result = askquestion("Verzeichnisse...", "Auch Unterordner durchsuchen?", default="no")

            stnrd_fldr = "D:/___ED/Eigene Videos"

            if result == 'yes':
                self.on_read_all_entry(stnrd_fldr)
            else:
                self.on_read_main_entry(stnrd_fldr)
        else:
            self.read_csv_file("doks/movies.csv")
            # self.read_xls_file("doks/movies.xls")

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

    window.start_app()

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

__blackjack__ hat geschrieben: Dienstag 6. Februar 2024, 17:57 @KlaRo: Um aus einer Klasse ein Objekt zu erzeugen muss man die Klasse aufrufen. Das gehört zu den Grundlagen. Und die sollte man IMHO erst einmal lernen bevor man mit GUIs anfängt. Denn für eine GUI muss man so ziemlich alles können, von Funktionen bis objekorientierter Programmierung. Und dann kommt bei GUIs noch ereignisbasierte Programmierung hinzu. Es ist einfacher wenn man die Sachen einzeln, aufeinander aufbauend lernt, statt gleich mit etwas einzusteigen wo man gleich alles auf einmal kennen und können muss.

Die GUI benutzt keine Layouts, sondern absolute Grössen und Positionen in Pixeln, gemischt mit Schriftgrössen in „point“. Das funktioniert nicht. Beziehungsweise nur bei Systemen mit ähnlichen Bildschirmgrössen, -auflösungen, und -einstellungen. Bei der heutigen Bandbreite was diese Werte/Eigenschaften angeht, sollte man solche harten vorgaben nicht machen. Im besten Fall sieht es komisch aus, im schlechtesten Fall ist die GUI nicht bedienbar wenn die Inhalte nicht in die Pixelvorgaben passen.

Auch so etwas wie zentrieren von Fenstern sollte man nicht machen. Es gibt Leute die haben zwei Monitore nebeneinander als *einen* Desktop konfiguriert. Bei denen landet das dann je zur Hälfte auf den Monitoren. Für das platzieren eines neuen Fensters ist die Fensterverwaltung des Systems verantwortlich. Die hat eine wesentlich bessere Übersicht wie alles angeordnet ist, und wo Platz ist.

Man generiert normalerweise keinen Code aus der *.ui-Datei aus dem Designer, sondern lädt diese Datei zur Laufzeit zum Beispiel mit dem `PyQt6.uic`-Modul wenn man PyQt als Anbindung an Qt verwendet.

`sys` importiert man nicht aus `tkinter`. Das ist nicht garantiert das `tkinter` das seinerseits importiert.

Modulnamen werden per Konvention klein_mit_unterstrichen geschrieben. Das es `functions`, `ui`, und `Messages` gibt, deutet darauf hin, dass da einzelne Module irgendwo herum liegen: die sollte man in einem Package zusammenfassen, damit nur *ein* Name in ”Konkurrenz” zu anderen installierten Modulen und Packages steht.

`functions` ist kein sinnvoller Modulname, weil das „Funktionen“ kein sinnvolles Ordnungskriterium ist. Der Name eines Moduls sollte dem Leser vermitteln was der Inhalt *bedeutet*, nicht dass da nur Objekte von einem bestimmten Typ (Funktionen) drin sind.

`canc()` ist kein guter Funktionsname. Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen.

`app` gehört nicht auf Modulebene, und auch alles was im ``if __name__ == …``-Zweig steht, sollte in einer Funktion verschwinden, die üblicherweise `main()` heisst.
Das Problem ist nicht, dass ich diese Grundlagen nicht gelernt habe, sondern, dass ich diese, nach 3 bis 4 Jahren Pause dummerweise teils wieder vergessen habe :cry:
Ich wollte eigentlich nur das damals begonnene Projekt ergänzen / abschließen.
Sirius3
User
Beiträge: 17762
Registriert: Sonntag 21. Oktober 2012, 17:20

So lange da noch tkinter benutzt wird, braucht man ja auch nicht nach weiteren Fehlern zu suchen, vor allem, weil da nur eine Messagebox geöffnet wird, was ja wirklich kein Problem ist, das durch die Qt-Messagebox zu ersetzen.
Benutzeravatar
__blackjack__
User
Beiträge: 13124
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@KlaRo: Dann musst Du das halt wieder auffrischen. Wenn es schon mal bekannt war, dann geht das auch einfacher als wenn man es komplett neu lernt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

So Tkinter wird nicht mehr benutzt.

Jetzt startet zwar das gewünschte Fenster, führt allerdings nichts weiter aus

Code: Alles auswählen

    def list_movies(self):
        from ListMovs import ListMovies
        self.window_movs = ListMovies()
        self.window_movs.show()
Was fehlt jetzt noch?
Oder ist das immer noch falsch?
Zuletzt geändert von KlaRo am Mittwoch 7. Februar 2024, 11:43, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was passiert denn, wenn das sys.exit() entfernt wird? Bleibt es dann offen? Das waere ja ein Hinweis. Und GUIs sind immer Ereignisgetrieben, das show() blockiert nicht, bis da ein Fenster geschlossen wird oder so. Also wird auch sofort danach das sys.exit() aufgerufen. Zu guter Letzt: man importiert nicht lokal, das hat nur wenige Anwendungszwecke, die hier nicht gegeben sind.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

__deets__ hat geschrieben: Mittwoch 7. Februar 2024, 11:41 Was passiert denn, wenn das sys.exit() entfernt wird? Bleibt es dann offen? Das waere ja ein Hinweis. Und GUIs sind immer Ereignisgetrieben, das show() blockiert nicht, bis da ein Fenster geschlossen wird oder so. Also wird auch sofort danach das sys.exit() aufgerufen. Zu guter Letzt: man importiert nicht lokal, das hat nur wenige Anwendungszwecke, die hier nicht gegeben sind.
Trotzdem war das wieder weg.
Habs jetzt umgeschrieben und bleibt offen, aber führt sonst nichts aus. Eigentlich sollte eine Abfrage erscheinen. Muss ich die Def dazu explizit aufrufen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe keine Ahnung, was du da probierst, das kann man aus 5 Zeilen Code nicht abschaetzen.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Mittels der »def list_movies(self):« (s. oben) soll folgendes aufgerufen werden:

Code: Alles auswählen

import functions
import os, sys

from csv import reader, writer
from PyQt5 import QtWidgets, QtCore
# from PyQt5.uic import loadUi
from GUI.GUI_Movies import Ui_MainWindow

app = QtWidgets.QApplication([])

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

        # loadUi("ui.GUI_Movies.ui", self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle("Videodateienliste")

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

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

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

        self.ui.progressBar.hide()

        fensterbreite = 1500
        fensterhoehe = 1000
        self.setFixedWidth(fensterbreite)
        self.setFixedHeight(fensterhoehe)

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

    def showdialog1(self):
        from PyQt5.QtWidgets import QMessageBox

        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):
        from PyQt5.QtWidgets import QMessageBox

        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_())
Antworten