PyQt + Matplotlib – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

PyQt + Matplotlib – Python – Fórum – Programujte.comPyQt + Matplotlib – Python – Fórum – Programujte.com

 

MFR
~ Anonymní uživatel
6 příspěvků
30. 3. 2022   #1
-
0
-

Ahoj, potřeboval bych radu, jak dostat graf matplolib (např. FFT) do okna pod buttons, kterými budu graf aktualizovat. Také bych potřeboval, aby se graf přizpůsobil velikosti okna. Na přiloženém obrázku je moje představa.

Pomůže mi někdo?

Díky moc

import sys

from PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QCheckBox, QWidget, QLabel
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import random


class AnotherWindow(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.setWindowTitle("MFR - Options")
        self.setMinimumSize(QSize(1024, 600))
        self.setLayout(layout)

class MainWindow(QMainWindow):
 
    def button_TS_clicked(self):
        print("Time signal button clicked!")

    def button_FFT1500_clicked(self):
        print("FFT1500 button clicked!")

    def button_FFT7500_clicked(self):
        print("FFT7500 button clicked!")
    
    def button_hilbert_clicked(self):
        print("Hilbert button clicked!")

    def button_save_clicked(self):
        print("Save button clicked!")    

    def button_options_clicked(self):
        self.dialog.exec_()

    def cb_update(self, state):
        if state == Qt.CheckState.Checked.value:
            print("AutoUpdate ON")
        else:
            print("AutoUpdate OFF")

    def options_window(self, checked):
        if self.window1.isVisible():
            self.window1.hide()
        else:
            self.window1.show()
     
    def __init__(self):
                
        super().__init__()
        QMainWindow.__init__(self)
        self.window1 = AnotherWindow()
        self.setWindowTitle("MFR")
        self.setMinimumSize(QSize(1024, 600))

        
        button_TS = QPushButton("Time signal", self)
        button_TS.move(30,30)
        button_TS.clicked.connect(self.button_TS_clicked)

        button_FFT1500 = QPushButton("FFT 10-1500Hz", self)
        button_FFT1500.move(150,30)
        button_FFT1500.clicked.connect(self.button_FFT1500_clicked)

        button_FFT7500 = QPushButton("FFT 500-7500Hz", self)
        button_FFT7500.move(270,30)
        button_FFT7500.clicked.connect(self.button_FFT7500_clicked)

        button_hilbert = QPushButton("Hilbert", self)
        button_hilbert.move(390,30)
        button_hilbert.clicked.connect(self.button_hilbert_clicked)

        button_save = QPushButton("Save wav", self)
        button_save.move(510,30)
        button_save.clicked.connect(self.button_save_clicked)

        button_options = QPushButton("Options", self)
        button_options.move(630,30)
        button_options.clicked.connect(self.options_window)
         
        cb = QCheckBox("Auto Update", self)
        cb.move(750,30)
        cb.stateChanged.connect(self.cb_update)
        cb.toggle()
        cb.setChecked(False)

        self.label_1 = QLabel(self)
        self.label_1.move(30, 70)
        self.label_1.setText("SOME TEXTS.........................")

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

Připojen obrázek.

Nahlásit jako SPAM
IP: 85.163.83.–
gna
~ Anonymní uživatel
1698 příspěvků
30. 3. 2022   #2
-
0
-

Nevím, jestli je backend_qt5agg použitelný s PyQt6 (zkus backend_qt6agg [netuším, jestli existuje] nebo backend_qtagg [bez čísla]). Ale jinak je to celé. Tak jak do toho okna vkládáš jiné widgety, tak stejně tam vložíš i ten FigureCanvas. A aby ti widgety reagovaly na změnu velikosti okna, tak je nebudeš pozicovat absolutně, ale použiješ nějaký layout manager.

Příklad je v dokumentaci.

Nahlásit jako SPAM
IP: 213.211.51.–
mfr
~ Anonymní uživatel
6 příspěvků
30. 3. 2022   #3
-
0
-

#2 gna
Děkuji! A ještě se rovnou zeptám:

1) Jak přidám nad horní graf mezeru např. 200 pixelů, abych tam umístil tlačítka a texty?

2) Předpokládám, ovládání grafu bude mezi tlačítky a grafem.

3) Mohu nastavit rozměr hlavního okna v pixelech?

Ještě jednou děkuju.

Nahlásit jako SPAM
IP: 85.163.82.–
gna
~ Anonymní uživatel
1698 příspěvků
31. 3. 2022   #4
-
0
-

1) Nebudeš dělat místo pro tlačítka, ale prostě tam vložíš tlačítka. Ale VBox teda vkládá widgety pod sebe, tak ta tlačítka můžeš ještě zabalit do HBoxu (vedle sebe) a ten pak vložit do VBoxu.

2) Netuším, co myslíš.

3) mělo by jít použít třeba metodu resize.

from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QPushButton, QWidget
from matplotlib.backends.backend_qtagg import FigureCanvas
from matplotlib.figure import Figure


class ApplicationWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.resize(500, 500)

        self._main = QWidget()
        self.setCentralWidget(self._main)
        vbox = QVBoxLayout(self._main)

        hbox = QHBoxLayout()
        for i in range(4):
            button = QPushButton(f"Button {i}", self)
            hbox.addWidget(button)
        vbox.addLayout(hbox)

        figure_canvas = FigureCanvas(Figure())
        vbox.addWidget(figure_canvas)

        ax = figure_canvas.figure.subplots()
        x = y = [2, 4, 6, 8]
        ax.plot(x, y)


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    win = ApplicationWindow()
    win.show()
    app.exec()
Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý