Python Forum

Full Version: Open a new window does not work
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,

i have a ui for the live plotter window. In this UI i have an menu point "Settings" (liveplotterEinstellungen). I load the UI and then connect with signal and slot to the menu point from the ui to a function (def einstellungen_klicked()) with should open a new window and print a text. I don't get an error but i don't see a text after click the button. Can anyonw help?

import pyqtgraph as pg
from PyQt6.QtWidgets import QMainWindow, QDialog
from PyQt6 import uic
import numpy as np
from PySide6.QtGui import Qt
import time

SAMPE_ARRAY = 100


# Laden der UI-Datei für das Einstellung Fenster im Liveplotter
uiclass, baseclass = uic.loadUiType("plotter_live_window.ui")


# Laden Sie die UI-Datei
ui_file2 = "plotter_live_window.ui"
ui2 = uic.loadUi(ui_file2)


liveplotterEinstellungen = ui2.liveplotterEinstellungen

# Laden der UI-Datei für das Einstellung Fenster im Liveplotter
einstellungs_fenster = uic.loadUi("liveplotter_einstellungen.ui")



class PlotterWindow(QMainWindow, uiclass):
    def __init__(self, df):
        super().__init__()
        self.plot_item = None
        self.setupUi(self)
        self.actionAktualisieren.triggered.connect(self.update_button_plotter)

        self.data = np.random.normal(size=SAMPE_ARRAY)  # Beispiel für zufällige Daten
        self.timer = pg.QtCore.QTimer()
        self.timer.timeout.connect(self.update_plot_data)
        self.timer.start(800)  # Aktualisierung alle 50 Millisekunden

    def plot(self, df):
        self.plot_item = self.graphWidget.plot(self.data, pen='w')  # Erstellen des Plot-Items


    def update_plot_data(self):
        from safe_to_excel import df
        spo2_list = df['Red'].tail(SAMPE_ARRAY).astype(float)  # Gibt die letzten 100 Werte aus
        spo2_list.reset_index(drop=True, inplace=True)  # Setze den Index zurück

        index = 0  # Startindex für den Datenabruf
        while index < SAMPE_ARRAY:
            data_point = spo2_list[index]  # Datenpunkt für den aktuellen Index

            print(f"Datenpunkt {index + 1}: {data_point}")  # Datenpunkt printen

            self.data = np.roll(self.data, -1)
            self.data[-1] = data_point
            self.plot_item.setData(y=self.data)  # Aktualisieren der Daten des Plot-Items

            pg.QtCore.QCoreApplication.processEvents()  # Aktualisieren des Plot-Widgets
            time.sleep(0.017)  # Pause von 10 Millisekunden

            # pg.QtCore.QTimer.singleShot(50,
           # pg.QtCore.QCoreApplication.instance().quit)  # Warten auf Timer-Timeout (50 ms)

            index += 1

        # Nachdem alle 100 Datenpunkte abgearbeitet wurden
        # Aktualisieren Sie das DataFrame `df` und laden Sie neue Daten
        from safe_to_excel import df
        spo2_list = df['Red'].tail(SAMPE_ARRAY).astype(float)  # Gibt die letzten 100 Werte aus
        spo2_list.reset_index(drop=True, inplace=True)  # Setze den Index zurück

        index = 0  # Setze den Index auf 0 für den nächsten Durchlauf



    def update_button_plotter(self):
        pass

    def keyPressEvent(self, event):
        if event.key() == Qt.Key.Key_F5:
            self.update_button_plotter()
        else:
            super().keyPressEvent(event)
            

  
def einstellungen_klicked():
    print("Einstellungen gedrückt")
    einstellungs_fenster.show()  # Annzeigen des Plotter Fensters

liveplotterEinstellungen.triggered.connect(einstellungen_klicked)                              
Without going too deep, you do realize that einstellungen_klicked() is not part of your PlotterWindow class? Indentation is wrong if you meant it to be.
Try just making the window.
import sys
from PyQt6 import QtWidgets, uic

app = QtWidgets.QApplication(sys.argv)
einstellungs_fenster = uic.loadUi("liveplotter_einstellungen.ui")
einstellungs_fenster.show()
app.exec()
(Jun-13-2023, 11:11 AM)jefsummers Wrote: [ -> ]Without going too deep, you do realize that einstellungen_klicked() is not part of your PlotterWindow class? Indentation is wrong if you meant it to be.

Thanks for the info, but this was not the problem.

(Jun-13-2023, 02:07 PM)deanhystad Wrote: [ -> ]Try just making the window.
import sys
from PyQt6 import QtWidgets, uic

app = QtWidgets.QApplication(sys.argv)
einstellungs_fenster = uic.loadUi("liveplotter_einstellungen.ui")
einstellungs_fenster.show()
app.exec()

This works.

import pyqtgraph as pg
from PyQt6.QtWidgets import QMainWindow, QDialog
from PyQt6 import uic
import numpy as np
from PySide6.QtGui import Qt
import time
from PyQt6 import QtWidgets, uic
import sys


SAMPE_ARRAY = 100


# Laden der UI-Datei für das Einstellung Fenster im Liveplotter
uiclass, baseclass = uic.loadUiType("plotter_live_window.ui")


# Laden Sie die UI-Datei
ui_file2 = "plotter_live_window.ui"
ui2 = uic.loadUi(ui_file2)


liveplotterEinstellungen = ui2.liveplotterEinstellungen

# Laden der UI-Datei für das Einstellung Fenster im Liveplotter
einstellungs_fenster = uic.loadUi("liveplotter_einstellungen.ui")



class PlotterWindow(QMainWindow, uiclass):
    def __init__(self, df):
        super().__init__()
        self.plot_item = None
        self.setupUi(self)
        self.actionAktualisieren.triggered.connect(self.update_button_plotter)

        self.data = np.random.normal(size=SAMPE_ARRAY)  # Beispiel für zufällige Daten
        self.timer = pg.QtCore.QTimer()
        self.timer.timeout.connect(self.update_plot_data)
        self.timer.start(800)  # Aktualisierung alle 50 Millisekunden

    def plot(self, df):
        self.plot_item = self.graphWidget.plot(self.data, pen='w')  # Erstellen des Plot-Items


    def update_plot_data(self):
        from safe_to_excel import df
        spo2_list = df['Red'].tail(SAMPE_ARRAY).astype(float)  # Gibt die letzten 100 Werte aus
        spo2_list.reset_index(drop=True, inplace=True)  # Setze den Index zurück

        index = 0  # Startindex für den Datenabruf
        while index < SAMPE_ARRAY:
            data_point = spo2_list[index]  # Datenpunkt für den aktuellen Index

            print(f"Datenpunkt {index + 1}: {data_point}")  # Datenpunkt printen

            self.data = np.roll(self.data, -1)
            self.data[-1] = data_point
            self.plot_item.setData(y=self.data)  # Aktualisieren der Daten des Plot-Items

            pg.QtCore.QCoreApplication.processEvents()  # Aktualisieren des Plot-Widgets
            time.sleep(0.017)  # Pause von 10 Millisekunden

            # pg.QtCore.QTimer.singleShot(50,
           # pg.QtCore.QCoreApplication.instance().quit)  # Warten auf Timer-Timeout (50 ms)

            index += 1

        # Nachdem alle 100 Datenpunkte abgearbeitet wurden
        # Aktualisieren Sie das DataFrame `df` und laden Sie neue Daten
        from safe_to_excel import df
        spo2_list = df['Red'].tail(SAMPE_ARRAY).astype(float)  # Gibt die letzten 100 Werte aus
        spo2_list.reset_index(drop=True, inplace=True)  # Setze den Index zurück

        index = 0  # Setze den Index auf 0 für den nächsten Durchlauf



    def update_button_plotter(self):
        pass

    def keyPressEvent(self, event):
        if event.key() == Qt.Key.Key_F5:
            self.update_button_plotter()
        else:
            super().keyPressEvent(event)

    def einstellungen_klicked():
        print("Einstellungen gedrückt")
        einstellungs_fenster.show()  # Annzeigen des Plotter Fensters

    liveplotterEinstellungen.triggered.connect(einstellungen_klicked)      
            

  
                        

app = QtWidgets.QApplication(sys.argv)
einstellungs_fenster = uic.loadUi("liveplotter_einstellungen.ui")
einstellungs_fenster.show()
app.exec()
Regards
Now i work:

In the __init__:

        self.liveplotterEinstellungen.triggered.connect(self.einstellungen_klicked) 
and in the window class:

   def einstellungen_klicked(self):
        print("Einstellungen gedrückt")
        einstellungs_fenster.show()  # Annzeigen des Plotter Fensters