大家好! 我是python和PyQT的新手。 我想用这个公式计算应力张量分量
其中lambda,mu和alpha - 是常数,T - 是温度的变化。
然后使用matplotlib绘制它,x轴上的温度变化,以及y轴上的应力变化。
我在QT Designer中创建了一个带有三个按钮的GUI,用于计算不同的材料。到目前为止,我只能在某个温度点计算应力。
但现在我一直坚持策划,因为我从未使用matlib进行策划,我希望你能帮助我。
import sys
from PyQt4 import QtCore, QtGui, uic
qtCreatorFile = "Application.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MyApp(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.clcbtn.clicked.connect(self.CalculateStress)
self.clcbtn_2.clicked.connect(self.CalculateStress1)
self.clcbtn_3.clicked.connect(self.CalculateStress2)
def CalculateStress(self):
t = int(self.textEdit.toPlainText())
lam = 55500000000
theta = 10
mu = 26100000000
alpha = 0.0000222
str11 = 3
total_stress = lam * theta + 2 * mu * str11 - (3 * lam + 2 * mu) * alpha * t
total_stress_string = "The total stress is: " + str(total_stress)
self.results_window.setText(total_stress_string)
def CalculateStress1(self):
t = int(self.textEdit.toPlainText())
lam = 104400000000
theta = 10
mu = 82000000000
alpha = 0.000013
str11 = 5
total_stress1 = lam * theta + 2 * mu * str11 - (3 * lam + 2 * mu) * alpha * t
total_stress_string = "The total stress is: " + str(total_stress1)
self.results_window.setText(total_stress_string)
def CalculateStress2(self):
t = int(self.textEdit.toPlainText())
lam = 5450000000
theta = 10
mu = 1480000000
alpha = 0.0000702
str11 = 3
total_stress2 = lam * theta + 2 * mu * str11 - (3 * lam + 2 * mu) * alpha * t
total_stress_string = "The total stress is: " + str(total_stress2)
self.results_window.setText(total_stress_string)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
答案 0 :(得分:0)
您需要一个带有FigureCanvas的小部件才能这样做。我可以分享我的自定义QWidget,它基于matloplib reference。
中的示例class MplCanvas(FigureCanvas):
"""Represents a canvas in QtGui.QWidget"""
def __init__(self):
self.fig = Figure()
FigureCanvas.__init__(self, self.fig)
FigureCanvas.setSizePolicy(self,
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
class MplWidget(QtGui.QWidget):
"""Represents a customized Matplotlib QWidget"""
def __init__(self):
QtGui.QWidget.__init__(self)
self.canvas = MplCanvas()
self.axes = self.canvas.fig.add_subplot(1, 1, 1)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.canvas)
def draw_array(self, label, a):
line, = self.axes.plot(a[:,0], a[:,1], label=label)
self.axes.legend()
self.resize_subplot(self.axes)
self.canvas.draw()
您可以使用myMplWidget = MplWidget()
创建一个实例,将其添加到布局中,或在QMainWindow
setCentralWidget(myMplWidget)
中将其用作centralWidget并使用myMplWidget.draw_array("My array", arr)
,假设为{{ 1}}是一个二维数组
如果您未能使代码正常运行,请及时通知我。我为此答案修改了它,并没有测试修改