ich habe bei einem kleinen Pythonprogramm ein kleines Problem. Ich habe auch schon rumgegoogled, nur funktioniert dann jedes Mal an einer anderen Stelle mein Programm nicht. Jetzt fällt mir wirklich nichts mehr ein. Da ich bisher nur kleinere Sachen in Java programmiert habe und noch kaum was in Python, bräuchte ich eure Hilfe
Das Programm ist eine Mathe-App. Durch klicken auf Buttons im Hauptfenster, soll man in die jeweilige "Unterapp" gelangen, die sich dann als Dialog öffnt. Die Apps sind mit PyQt5 programmiert und die Oberfläche über eine .ui Datei eingebunden. Als Einzel-App funktionieren sie auch,
Beim aufrufen der Apps aus den Hauptprogramm treten dann aber die ersten Probleme auf:
Wenn ich es über import versuche und die Hauptapp öffnen möchte, dann öffnet sich statt des Hauptprogramms, die zuerst als import eingefügte "Unterapp".
Wenn ich es so versuche wie das Programm aktuell ist, läd es beim klicken des Buttons nur die .ui Datei der "Unterapp". Dadurch fehlt dann die Hälfte von dieser "Unterapp" (die ganzen numpy und canvas und matplotsachen) und die Funktionen die ich in der .py Datei der Unterprogramme programmiert habe .
Die letze Idee die ich gefunden hatte war über <subprocess.Popen(".....")>, da passiert gar nichts. Wäre aber die wohl simpelste und beste Möglichkeit gewesen.
Vielen lieben Dank schon mal
Das Hauptprogramm:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 14 13:21:55 2019
@author: kata
"""
import sys
import PyQt5.QtCore as core
import PyQt5.QtWidgets as widgets
import PyQt5.QtGui as gui
import PyQt5.uic as uic
from PyQt5.QtWidgets import QWidget, QApplication
import numpy as np
import scipy as sp
import matplotlib as mpl
import scipy.misc
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
import subprocess
#import sin.py
#import cos.py
class main(QWidget):
def __init__(self):
super().__init__()
app = widgets.QApplication(sys.argv)
w = uic.loadUi("main.ui")
def clickedSinus():
#subprocess.Popen("home/kata/Workspaces/python-workspaces/mathplotTest/MatheApp/sin.py")
diaSin = uic.loadUi("sin.ui")
#diaSin.show()
diaSin.exec_()
print("Sinus gewählt")
w.btnSin.clicked.connect(clickedSinus)
def clickedCosinus():
diaCos = uic.loadUi("cos.ui")
diaCos.exec_()
#diaCos.show()
print("Cosinus gewählt")
w.btnCos.clicked.connect(clickedCosinus)
w.show()
sys.exit(app.exec_())
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 13 17:05:38 2019
@author: kata
"""
import sys
import numpy as np
import scipy as sp
import matplotlib as mpl
import scipy.misc
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
from PyQt5 import QtWidgets, uic, QtCore, QtGui
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout
from mpl_toolkits.axisartist.axislines import SubplotZero
class sin2(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = uic.loadUi("sin.ui", self)
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.toolbar = NavigationToolbar(self.canvas, self)
self.button = QPushButton('Plot')
self.button.clicked.connect(self.plot)
layout = QVBoxLayout()
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
layout.addWidget(self.button)
layout.addWidget(self.lblStrecken)
layout.addWidget(self.hSlider)
layout.addWidget(self.lblStau)
layout.addWidget(self.hSlider_2)
layout.addWidget(self.lbla)
layout.addWidget(self.a)
layout.addWidget(self.lblb)
layout.addWidget(self.b)
self.setLayout(layout)
self.ui.hSlider.setMinimum(0)
self.ui.hSlider.setMaximum(10)
self.ui.hSlider.setSingleStep(0.2)
self.ui.hSlider.valueChanged.connect(self.sliderValueChanged)
self.ui.hSlider_2.setMinimum(0)
self.ui.hSlider_2.setMaximum(10)
self.ui.hSlider_2.setSingleStep(0.2)
self.ui.hSlider_2.valueChanged.connect(self.sliderValueChanged2)
self.ui.a.textChanged.connect(self.setA)
self.ui.b.textChanged.connect(self.setB)
def sliderValueChanged(self, value):
global k
k = float(value)
print(k)
def sliderValueChanged2(self, value):
global k
k = 1/float(value)
print(k)
def setA(self, value):
global a
a = float(value)
print("a: ", a)
def setB(self, value):
global b
b = float(value)
print("b: ", b)
def plot(self):
self.figure.clear()
print("a: ", a)
print("b: ", b)
print("k: ", k)
x = np.linspace(0, 4*np.pi, 100)
#x = np.linspace(0, 2*np.pi, 100)
#x = np.arange(0.0, (2*np.pi), 0.01)
# x = np.linspace(-5, 10*np.pi, 100)
y = np.linspace(-5, 5, 100)
y = a + np.sin((k*x)+b)
f, ax = plt.subplots()
ax = self.figure.add_subplot(111)
tex = r'$f(x) = a + sin(k * x) + b$'
tex_y = r'$sin(x)$'
tex_x = r'$x$'
ax.set_title(tex, fontsize=20)
ax.set(xlabel=tex_x, ylabel=tex_y)
ax.grid()
ax.plot(x, y)
plt.axis('equal')
plt.show()
self.canvas.draw()
app = QtWidgets.QApplication(sys.argv)
dialog = sin2()
dialog.show()
sys.exit(app.exec_())
[code]