简体   繁体   English

将Matplotlib与PyQt4结合

[英]Combine Matplotlib with PyQt4

i have a simple GUI program, when i click the button it will do subplot matplotlib process from txt file and save the image as png file, but i got this error even the process is success. 我有一个简单的GUI程序,当我单击button ,它将从txt文件进行子图matplotlib处理,并将图像另存为png文件,但是即使处理成功,我也遇到了此错误。

在此处输入图片说明

i try using canvas , figure but still got error, honestly i not really understand how to combine matplotlib and pyqt. 我尝试使用canvasfigure但仍然出现错误,说实话,我不太了解如何结合使用matplotlib和pyqt。

this is my code 这是我的代码

import sys
from os import remove
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import jtextfsm as textfsm
import matplotlib.pyplot as plt
import numpy as np
import io

class Stream(QObject):
    newText = pyqtSignal(str)

    def write(self, text):
        self.newText.emit(str(text))

    def flush(self):
        pass

class MyClass(object):
    def __init__(self, device_type=None, ip=None, username=None, password=None, secret=None, command=None, command2=None, command3=None, command4=None):
        self.device_type = device_type
        self.ip = ip
        self.username = username
        self.password = password
        self.secret = secret
        self.command = command
        self.command2 = command2
        self.command3 = command3
        self.command4 = command4

class sshConnection(QThread):
    def __init__(self):
        QThread.__init__(self)
        self.window = Widget()

    def __del__(self):
        self.wait()

    def run(self):
        self.runSSH()

    def delete_file(self,name):
        remove(name + "-show-memory-statistic.csv")
        remove(name + "-show-process-cpu.csv")
        remove(name + "-show-version.csv")
        remove(name + "-show-env.csv")
        remove(name + "-show-flash.csv")
    # ------------- SSH Connection
    def runSSH(self):
        # do process
        nameFile = ['Switch-1']
        for list in nameFile:
            self.TextFSM(list)
            self.Graph(list)

    # ------------- Convert text file to CSV File
    def TextFSM(self, nameFile):
        try:
            input_file = open(nameFile + '.txt', encoding='utf-8')  # show version
            raw_text_data = input_file.read()
            input_file.close()

            input_file2 = open(nameFile + '.txt', encoding='utf-8')  # show env
            raw_text_data2 = input_file2.read()
            input_file2.close()

            input_file3 = open(nameFile + '.txt', encoding='utf-8')  # show flash
            raw_text_data3 = input_file3.read()
            input_file3.close()

            input_file4 = open(nameFile + '.txt', encoding='utf-8')  # show memory statistic
            raw_text_data4 = input_file4.read()
            input_file4.close()

            input_file5 = open(nameFile + '.txt', encoding='utf-8')  # show process cpu
            raw_text_data5 = input_file5.read()
            input_file5.close()

            template = open("show-version.textfsm")  # show version
            re_table = textfsm.TextFSM(template)
            fsm_results = re_table.ParseText(raw_text_data)

            template2 = open("show-env.textfsm")  # show env
            re_table2 = textfsm.TextFSM(template2)
            fsm_results2 = re_table2.ParseText(raw_text_data2)

            template3 = open("show-flash.textfsm")  # show flash
            re_table3 = textfsm.TextFSM(template3)
            fsm_results3 = re_table3.ParseText(raw_text_data3)

            template4 = open("show-memory-statistic.textfsm")  # show memory statistic
            re_table4 = textfsm.TextFSM(template4)
            fsm_results4 = re_table4.ParseText(raw_text_data4)

            template5 = open("show-process-cpu.textfsm")  # show process cpu
            re_table5 = textfsm.TextFSM(template5)
            fsm_results5 = re_table5.ParseText(raw_text_data5)

            outfile_name = open(nameFile + "-show-version.csv", "w+")  # show version
            outfile = outfile_name

            outfile_name2 = open(nameFile + "-show-env.csv", "w+")  # show env
            outfile2 = outfile_name2

            outfile_name3 = open(nameFile + "-show-flash.csv", "w+")  # show flash
            outfile3 = outfile_name3

            outfile_name4 = open(nameFile + "-show-memory-statistic.csv", "w+")  # show memory statistic
            outfile4 = outfile_name4

            outfile_name5 = open(nameFile + "-show-process-cpu.csv", "w+")  # show process cpu
            outfile5 = outfile_name5

            print(re_table.header)  # show version
            for s in re_table.header:
                outfile.write("%s;" % s)
            outfile.write("\n")

            counter = 0
            for row in fsm_results:  # show version
                print(row)
                for s in row:
                    outfile.write("%s;" % s)
                outfile.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table2.header)  # show env
            for s in re_table2.header:
                outfile2.write("%s;" % s)
            outfile2.write("\n")

            counter = 0
            for row in fsm_results2:  # show env
                print(row)
                for s in row:
                    outfile2.write("%s;" % s)
                outfile2.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table3.header)  # show flash
            for s in re_table3.header:
                outfile3.write("%s;" % s)
            outfile3.write("\n")

            counter = 0
            for row in fsm_results3:  # show flash
                print(row)
                for s in row:
                    outfile3.write("%s;" % s)
                outfile3.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table4.header)  # show memory statistics
            for s in re_table4.header:
                outfile4.write("%s;" % s)
            outfile4.write("\n")

            counter = 0
            for row in fsm_results4:  # show memory statistics
                print(row)
                for s in row:
                    outfile4.write("%s;" % s)
                outfile4.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table5.header)  # show process cpu
            for s in re_table5.header:
                outfile5.write("%s;" % s)
            outfile5.write("\n")

            counter = 0
            for row in fsm_results5:  # show process cpu
                print(row)
                for s in row:
                    outfile5.write("%s;" % s)
                outfile5.write("\n")
                counter += 1
            print("Write %d records" % counter)
        except IOError:
            print("Error: There Have File does not appear to exist.")

    # ------------- Convert Data to Graphic
    def Graph(self, fileName2):

        plt.figure(figsize=(8.8, 5.5), dpi=150) 
        plt.rcParams['text.color'] = 'k'
        plt.rcParams.update({'font.size': 6})
        plt.subplots_adjust(hspace=.4, right=.8, bottom=.2)

        # 1 - show flash
        plt.subplot(2, 2, 1)
        try:
            data = np.loadtxt(fileName2 + '-show-flash.csv', dtype=bytes, delimiter=';', usecols=(0, 1))\
                .astype(str, io.StringIO())

            slices = data[1]
            labels = data[0]
            colors = ['lightskyblue', 'lightcoral']
            explode = [0.08, 0.01]
            pie = plt.pie(slices, labels=labels, colors=colors, explode=explode, startangle=90, shadow=True,
                          autopct='%1.1f%%')

            plt.title('Flash Memory\n(Bytes)')
            plt.legend(pie[0], [" ".join(a) for a in zip(labels, slices)], loc='upper right')
            plt.axis('equal')
        except IOError:
            print("Error: There Have File does not appear to exist.")

        # 2 - show memory statistic
        plt.subplot(2, 2, 2)
        try:
            data = np.loadtxt(fileName2 + '-show-memory-statistic.csv', dtype=bytes, delimiter=';',
                              usecols=(3, 4)).astype(str, io.StringIO())
            slices = data[1]
            labels = data[0]
            colors = ['lightskyblue', 'lightcoral']
            explode = [0.08, 0.01]
            pie = plt.pie(slices, labels=labels, colors=colors, explode=explode, startangle=90, shadow=True,
                          autopct='%1.1f%%')

            plt.title('Memory Statistic\n(Bytes)')
            plt.legend(pie[0], [" ".join(a) for a in zip(labels, slices)], loc='upper right')
            plt.axis('equal')
        except IOError:
            print("Error: There Have File does not appear to exist.")


        # 3 - show cpu utilization

        plt.subplot(2, 2, 3)

        def autolabel(rects):
            for rect in rects:
                height = rect.get_height()
                plt.text(rect.get_x() + rect.get_width() / 2, height - 2, '%1.1f%%' % int(height), ha='center',
                         va='bottom')
        N = 3
        try:
            data = np.loadtxt(fileName2 + '-show-process-cpu.csv', dtype=bytes, delimiter=';',
                              usecols=(0, 1, 2)).astype(str)

            my_xticks = data[0]
            utilization = data[1]
            utilization_int = [int(x) for x in utilization]

            ind = np.arange(N)
            width = 0.5

            rects1 = plt.bar(ind, utilization_int, width, color='lightblue', )

            plt.title("CPU Utilization\n ('%') ")
            plt.xticks(ind, my_xticks)
            plt.xlabel("CPU Utilization")
            plt.ylabel("Percent(%)")

            autolabel(rects1)
        except IOError:
            print("Error: There Have File does not appear to exist.")

        # 4 - CPU Environtment
        plt.subplot(2, 2, 4)

        def autolabel(rects):
            for rect in rects:
                height = rect.get_height()
                plt.text(rect.get_x() + rect.get_width() / 2, height - 5, '%d C' % int(height), ha='center',
                         va='bottom')

        N = 3
        try:
            data = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=2).astype(str)
            value = data[1]
            if value == '':
                try:
                    fan = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=0).astype(str)
                    system_temp = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=1).astype(
                        str)
                    power = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=6).astype(str)
                    rps = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=7).astype(str)

                    uptime = np.loadtxt(fileName2 + '-show-version.csv', dtype=bytes, delimiter=';', usecols=3).astype(
                        str)
                    pid = np.loadtxt(fileName2 + '-show-version.csv', dtype=bytes, delimiter=';', usecols=5).astype(str)
                    sn = np.loadtxt(fileName2 + '-show-version.csv', dtype=bytes, delimiter=';', usecols=6).astype(str)

                    uptime_title = uptime[0]
                    uptime_value = uptime[1]

                    pid_title = pid[0]
                    pid_value = pid[1]

                    sn_title = sn[0]
                    sn_value = sn[1]

                    fan_title = fan[0]
                    fan_status = fan[1]

                    system_temp_title = system_temp[0]
                    system_temp_value = system_temp[1]

                    power_tile = power[0]
                    power_value = power[1]

                    rps_tile = rps[0]
                    rps_value = rps[1]

                    text = fan_title + ' : ' + fan_status + '\n' + system_temp_title + ' : ' + system_temp_value + '\n' \
                           + power_tile + ' : ' + power_value + '\n' + rps_tile + ' : ' + rps_value + ' PRESENT' + '\n\n' \
                           + uptime_title + ' : ' + uptime_value + '\n' + pid_title + ' : ' + pid_value + '\n' + sn_title\
                           + ' : ' + sn_value

                    plt.title("Cpu Environment\n ('Celcius') ")
                    plt.xlabel('CPU Environment')
                    plt.ylabel('Celcius')

                    plt.text(.15, 1 / 3, text, style='oblique', bbox={'facecolor': 'white', 'alpha': 0.5, 'pad': 5})

                    # plt.show('')
                    plt.savefig(fileName2 + '.png', bbox_inches='tight')
                    # Delete CSV File

                except (IOError):
                    print("Error: There Have File does not appear to exist.")
                    plt.savefig(fileName2 + '.png', bbox_inches='tight')
                    # Delete CSV File

            else:

                try:
                    data = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';',
                                      usecols=(2, 4, 5)).astype(str)
                    fan = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=0).astype(str)
                    system_temp = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';', usecols=1).astype(
                        str)
                    system_temp_state = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, delimiter=';',
                                                   usecols=3).astype(str)

                    uptime = np.loadtxt(fileName2 + '-show-version.csv', dtype=bytes, delimiter=';', usecols=3).astype(
                        str)
                    pid = np.loadtxt(fileName2 + '-show-version.csv', dtype=bytes, delimiter=';', usecols=5).astype(str)
                    sn = np.loadtxt(fileName2 + '-show-version.csv', dtype=bytes, delimiter=';', usecols=6).astype(str)

                    y_height = np.loadtxt(fileName2 + '-show-env.csv', dtype=bytes, skiprows=1, delimiter=';',
                                          usecols=5).astype(int)

                    uptime_title = uptime[0]
                    uptime_value = uptime[1]

                    pid_title = pid[0]
                    pid_value = pid[1]

                    sn_title = sn[0]
                    sn_value = sn[1]

                    fan_title = fan[0]
                    fan_status = fan[1]

                    system_temp_title = system_temp[0]
                    system_temp_value = system_temp[1]

                    system_temp_state_title = system_temp_state[0]
                    system_temp_state_status = system_temp_state[1]

                    my_xticks = data[0]
                    utilization = data[1]
                    utilization_int = [int(x) for x in utilization]

                    ind = np.arange(N)
                    width = 0.5

                    text = fan_title + ': ' + fan_status + '\n' + system_temp_title + ': ' + system_temp_value + \
                           '\n' + system_temp_state_title + ': ' + system_temp_state_status

                    text2 = pid_title + ' : ' + pid_value + '\n' + sn_title + ' : ' + sn_value +\
                            '\n\n' + uptime_title + ' : ' + uptime_value

                    rects1 = plt.bar(ind, utilization_int, width, color='r')

                    plt.title("CPU Environment\n ('Celcius') ")
                    plt.xticks(ind, my_xticks)
                    plt.xlabel('CPU Environment')
                    plt.ylabel('Celcius')
                    plt.text(2.4, y_height / 2, text)
                    plt.text(-1.59, -y_height / 1.77, text2, style='oblique',
                             bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 5})
                    autolabel(rects1)

                    # plt.show()
                    plt.savefig(fileName2 + '.png', bbox_inches='tight')
                    # Delete CSV File
                    self.delete_file(fileName2)

                except (IOError, ValueError):
                    print("Error: There Have File does not appear to exist.")
                    plt.savefig(fileName2 + '.png', bbox_inches='tight')
                    # Delete CSV File

        except (IOError):
            print("Error: There Have File does not appear to exist.")
            plt.savefig(fileName2 + '.png', bbox_inches='tight')
            #Delete CSV File



class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.setWindowTitle("Network Automation")
        self.setFixedSize(350, 500)

        # button generate and add
        self.btgenerate = QPushButton(self)
        self.btgenerate.setText('Generate')
        self.btgenerate.setFixedWidth(70)

        # Processs textedit

        self.process = QTextEdit(self)
        self.process.setLineWrapColumnOrWidth(400)
        self.process.setLineWrapMode(QTextEdit.FixedPixelWidth)
        self.process.setReadOnly(True)

        layout = QGridLayout(self)
        layout.addWidget(self.btgenerate, 0, 0)
        layout.addWidget(self.process,1,0)

        self.btgenerate.clicked.connect(self.runThread)

    def onUpdateText(self, text):
        cursor = self.process.textCursor()
        cursor.movePosition(QTextCursor.End)
        cursor.insertText(text)
        self.process.setTextCursor(cursor)
        self.process.ensureCursorVisible()


    def runThread(self):
        self.process.setText('')
        self.run_thread = sshConnection()
        self.run_thread.start()

app = QApplication(sys.argv)
app.setStyle('cleanlooks')
app.processEvents()
window = Widget()
sys.stdout = Stream(newText=window.onUpdateText)
window.show()
sys.exit(app.exec_())

txt file https://drive.google.com/file/d/0B_jl0iXmYwS_NGMxZWZEdllyVWc/view?usp=sharing txt文件 https://drive.google.com/file/d/0B_jl0iXmYwS_NGMxZWZEdllyVWc/view?usp=sharing

textfsm file https://drive.google.com/drive/folders/0B_jl0iXmYwS_ZWRFTXJjRlcxTWM?usp=sharing (generate csv file for matplotlib required) textfsm文件 https://drive.google.com/drive/folders/0B_jl0iXmYwS_ZWRFTXJjRlcxTWM?usp=sharing (生成用于matplotlib的csv文件)

i hope anyone help me to fix this problem, 我希望有人能帮助我解决这个问题,

Thank You. 谢谢。

You should not plot in a different thread to the main thread, send a signal indicating that the processing has finished, in addition to use matplotlib you must indicate the backend qt4, you could insert the plot as part of the widget as shown below: 您不应该在与主线程不同的线程中绘图,发送信号指示处理已完成,除了使用matplotlib之外,您还必须指示后端qt4,您可以将绘图作为小部件的一部分插入,如下所示:

To clear the previous window you must use the cla() function, in your case: 要清除上一个窗口,您必须使用cla()函数:

[ax.cla() for ax in self.axes]

If you want the plot to be displayed you should use the following code: 如果要显示图,则应使用以下代码:

import io
from os import remove

import matplotlib
import numpy as np
import textfsm
from PyQt4.QtCore import QObject, pyqtSignal, QThread
from PyQt4.QtGui import QApplication, QWidget, QPushButton, QTextEdit, QGridLayout, QTextCursor, QSizePolicy

matplotlib.use('QT4Agg')
matplotlib.rcParams['text.color'] = 'k'
matplotlib.rcParams.update({'font.size': 6})

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class Stream(QObject):
    newText = pyqtSignal(str)

    def write(self, text):
        self.newText.emit(str(text))

    def flush(self):
        pass


class sshConnection(QThread):
    finishedFSM = pyqtSignal(str)

    def __init__(self):
        QThread.__init__(self)

    def __del__(self):
        self.wait()

    def run(self):
        self.runSSH()

    def runSSH(self):
        # do process
        filenames = ['Switch-1']
        for filename in filenames:
            # self.delete_file(filename)
            self.TextFSM(filename)
            self.finishedFSM.emit(filename)

    def TextFSM(self, nameFile):
        try:
            input_file = open(nameFile + '.txt', encoding='utf-8')  # show version
            raw_text_data = input_file.read()
            input_file.close()

            input_file2 = open(nameFile + '.txt', encoding='utf-8')  # show env
            raw_text_data2 = input_file2.read()
            input_file2.close()

            input_file3 = open(nameFile + '.txt', encoding='utf-8')  # show flash
            raw_text_data3 = input_file3.read()
            input_file3.close()

            input_file4 = open(nameFile + '.txt', encoding='utf-8')  # show memory statistic
            raw_text_data4 = input_file4.read()
            input_file4.close()

            input_file5 = open(nameFile + '.txt', encoding='utf-8')  # show process cpu
            raw_text_data5 = input_file5.read()
            input_file5.close()

            template = open("show-version.textfsm")  # show version
            re_table = textfsm.TextFSM(template)
            fsm_results = re_table.ParseText(raw_text_data)

            template2 = open("show-env.textfsm")  # show env
            re_table2 = textfsm.TextFSM(template2)
            fsm_results2 = re_table2.ParseText(raw_text_data2)

            template3 = open("show-flash.textfsm")  # show flash
            re_table3 = textfsm.TextFSM(template3)
            fsm_results3 = re_table3.ParseText(raw_text_data3)

            template4 = open("show-memory-statistic.textfsm")  # show memory statistic
            re_table4 = textfsm.TextFSM(template4)
            fsm_results4 = re_table4.ParseText(raw_text_data4)

            template5 = open("show-process-cpu.textfsm")  # show process cpu
            re_table5 = textfsm.TextFSM(template5)
            fsm_results5 = re_table5.ParseText(raw_text_data5)

            outfile_name = open(nameFile + "-show-version.csv", "w+")  # show version
            outfile = outfile_name

            outfile_name2 = open(nameFile + "-show-env.csv", "w+")  # show env
            outfile2 = outfile_name2

            outfile_name3 = open(nameFile + "-show-flash.csv", "w+")  # show flash
            outfile3 = outfile_name3

            outfile_name4 = open(nameFile + "-show-memory-statistic.csv", "w+")  # show memory statistic
            outfile4 = outfile_name4

            outfile_name5 = open(nameFile + "-show-process-cpu.csv", "w+")  # show process cpu
            outfile5 = outfile_name5

            print(re_table.header)  # show version
            for s in re_table.header:
                outfile.write("%s;" % s)
            outfile.write("\n")

            counter = 0
            for row in fsm_results:  # show version
                print(row)
                for s in row:
                    outfile.write("%s;" % s)
                outfile.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table2.header)  # show env
            for s in re_table2.header:
                outfile2.write("%s;" % s)
            outfile2.write("\n")

            counter = 0
            for row in fsm_results2:  # show env
                print(row)
                for s in row:
                    outfile2.write("%s;" % s)
                outfile2.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table3.header)  # show flash
            for s in re_table3.header:
                outfile3.write("%s;" % s)
            outfile3.write("\n")

            counter = 0
            for row in fsm_results3:  # show flash
                print(row)
                for s in row:
                    outfile3.write("%s;" % s)
                outfile3.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table4.header)  # show memory statistics
            for s in re_table4.header:
                outfile4.write("%s;" % s)
            outfile4.write("\n")

            counter = 0
            for row in fsm_results4:  # show memory statistics
                print(row)
                for s in row:
                    outfile4.write("%s;" % s)
                outfile4.write("\n")
                counter += 1
            print("Write %d records" % counter)

            print(re_table5.header)  # show process cpu
            for s in re_table5.header:
                outfile5.write("%s;" % s)
            outfile5.write("\n")

            counter = 0
            for row in fsm_results5:  # show process cpu
                print(row)
                for s in row:
                    outfile5.write("%s;" % s)
                outfile5.write("\n")
                counter += 1
            print("Write %d records" % counter)
        except IOError:
            print("Error: There Have File does not appear to exist.")


class MplCanvas(FigureCanvas):
    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""

    def __init__(self, parent=None, figsize=(8.8, 5.5), dpi=150):
        fig = Figure(figsize=figsize, dpi=dpi)

        fig.subplots_adjust(hspace=.4, right=.8, bottom=.2)

        self.axes = [fig.add_subplot(2, 2, i) for i in range(1, 5)]

        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

    def graph(self, filename):
        [ax.cla() for ax in self.axes]
        axes1, axes2, axes3, axes4 = self.axes
        colors = ['lightskyblue', 'lightcoral']
        explode = [0.08, 0.01]

        # show-env
        try:
            data = np.loadtxt('{}-show-flash.csv'.format(filename), dtype=bytes, delimiter=';', usecols=(0, 1)) \
                .astype(str, io.StringIO())

            slices = data[1]
            labels = data[0]

            pie = axes1.pie(slices, labels=labels, colors=colors, explode=explode, startangle=90, shadow=True,
                            autopct='%1.1f%%')

            axes1.title.set_text('Flash Memory\n(Bytes)')
            axes1.legend(pie[0], [" ".join(a) for a in zip(labels, slices)], loc='upper right')
            axes1.axis('equal')

        except IOError:
            print("Error: There Have File does not appear to exist.")

        # show-memory-statistic

        try:

            data = np.loadtxt('{}-show-memory-statistic.csv'.format(filename), dtype=bytes, delimiter=';',
                              usecols=(3, 4)).astype(str, io.StringIO())
            slices = data[1]
            labels = data[0]
            pie = axes2.pie(slices, labels=labels, colors=colors, explode=explode, startangle=90, shadow=True,
                            autopct='%1.1f%%')

            axes2.title.set_text('Memory Statistic\n(Bytes)')
            axes2.legend(pie[0], [" ".join(a) for a in zip(labels, slices)], loc='upper right')
            axes2.axis('equal')
        except IOError:
            print("Error: There Have File does not appear to exist.")

        # show-process-cpu
        N = 3

        try:
            data = np.loadtxt('{}-show-process-cpu.csv'.format(filename), dtype=bytes, delimiter=';',
                              usecols=(0, 1, 2)).astype(str)

            my_xticks = data[0]
            utilization = data[1]
            utilization_int = [int(x) for x in utilization]

            ind = np.arange(N)
            width = 0.5

            rects = axes3.bar(ind, utilization_int, width, color='lightblue', )

            axes3.set_title("CPU Utilization\n ('%') ")

            axes3.set_xticks(ind + width / 2)
            axes3.set_xticklabels(my_xticks)
            axes3.set_xlabel("CPU Utilization")
            axes3.set_ylabel("Percent(%)")

            for rect in rects:
                height = rect.get_height()
                axes3.text(rect.get_x() + rect.get_width() / 2, height - 2,
                           '%1.1f%%' % int(height), ha='center', va='bottom')

        except IOError:
            print("Error: There Have File does not appear to exist.")

        # show-env

        N = 3
        try:
            data = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';', usecols=2).astype(str)
            value = data[1]
            if value == '':
                try:
                    fan = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';', usecols=0).astype(
                        str)
                    system_temp = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';',
                                             usecols=1).astype(
                        str)
                    power = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';',
                                       usecols=6).astype(str)
                    rps = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';', usecols=7).astype(
                        str)

                    uptime = np.loadtxt('{}-show-version.csv'.format(filename), dtype=bytes, delimiter=';',
                                        usecols=3).astype(
                        str)
                    pid = np.loadtxt('{}-show-version.csv'.format(filename), dtype=bytes, delimiter=';',
                                     usecols=5).astype(str)
                    sn = np.loadtxt('{}-show-version.csv'.format(filename), dtype=bytes, delimiter=';',
                                    usecols=6).astype(str)

                    uptime_title = uptime[0]
                    uptime_value = uptime[1]

                    pid_title = pid[0]
                    pid_value = pid[1]

                    sn_title = sn[0]
                    sn_value = sn[1]

                    fan_title = fan[0]
                    fan_status = fan[1]

                    system_temp_title = system_temp[0]
                    system_temp_value = system_temp[1]

                    power_tile = power[0]
                    power_value = power[1]

                    rps_tile = rps[0]
                    rps_value = rps[1]

                    text = fan_title + ' : ' + fan_status + '\n' + system_temp_title + ' : ' + system_temp_value + '\n' \
                           + power_tile + ' : ' + power_value + '\n' + rps_tile + ' : ' + rps_value + ' PRESENT' + '\n\n' \
                           + uptime_title + ' : ' + uptime_value + '\n' + pid_title + ' : ' + pid_value + '\n' + sn_title \
                           + ' : ' + sn_value

                    axes4.set_title("Cpu Environment\n ('Celcius') ")
                    axes4.set_xlabel('CPU Environment')
                    axes4.set_ylabel('Celcius')

                    axes4.text(.15, 1 / 3, text, style='oblique', bbox={'facecolor': 'white', 'alpha': 0.5, 'pad': 5})

                    # plt.show('')
                    axes4.figure.savefig('{}.png'.format(filename), bbox_inches='tight')
                    # Delete CSV File

                except (IOError):
                    print("Error: There Have File does not appear to exist.")
                    axes4.figure.savefig('{}.png'.format(filename), bbox_inches='tight')
                    # Delete CSV File

            else:

                try:
                    data = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';',
                                      usecols=(2, 4, 5)).astype(str)

                    fan = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';', usecols=0).astype(
                        str)
                    system_temp = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';',
                                             usecols=1).astype(
                        str)

                    system_temp_state = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, delimiter=';',
                                                   usecols=3).astype(str)

                    uptime = np.loadtxt('{}-show-version.csv'.format(filename), dtype=bytes, delimiter=';',
                                        usecols=3).astype(
                        str)
                    pid = np.loadtxt('{}-show-version.csv'.format(filename), dtype=bytes, delimiter=';',
                                     usecols=5).astype(str)
                    sn = np.loadtxt('{}-show-version.csv'.format(filename), dtype=bytes, delimiter=';',
                                    usecols=6).astype(str)
                    y_height = np.loadtxt('{}-show-env.csv'.format(filename), dtype=bytes, skiprows=1, delimiter=';',
                                          usecols=5).astype(int)

                    uptime_title = uptime[0]
                    uptime_value = uptime[1]

                    pid_title = pid[0]
                    pid_value = pid[1]

                    sn_title = sn[0]
                    sn_value = sn[1]

                    fan_title = fan[0]
                    fan_status = fan[1]

                    system_temp_title = system_temp[0]
                    system_temp_value = system_temp[1]

                    system_temp_state_title = system_temp_state[0]
                    system_temp_state_status = system_temp_state[1]

                    my_xticks = data[0]
                    utilization = data[1]
                    utilization_int = [int(x) for x in utilization]

                    ind = np.arange(N)
                    width = 0.5

                    text = fan_title + ': ' + fan_status + '\n' + system_temp_title + ': ' + system_temp_value + \
                           '\n' + system_temp_state_title + ': ' + system_temp_state_status

                    text2 = pid_title + ' : ' + pid_value + '\n' + sn_title + ' : ' + sn_value + \
                            '\n\n' + uptime_title + ' : ' + uptime_value

                    rects1 = axes4.bar(ind, utilization_int, width, color='r')

                    axes4.set_title("CPU Environment\n ('Celcius') ")

                    axes4.set_xticks(ind)
                    axes4.set_xticklabels(my_xticks)

                    axes4.set_xlabel('CPU Environment')

                    axes4.set_ylabel('Celcius')
                    axes4.text(2.4, y_height / 2, text)
                    axes4.text(-1.59, -y_height / 1.77, text2, style='oblique',
                               bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 5})

                    for rect in rects1:
                        height = rect.get_height()
                        axes4.text(rect.get_x() + rect.get_width() / 2, height - 5, '%d C' % int(height), ha='center',
                                   va='bottom')

                    axes4.figure.savefig('{}.png'.format(filename), bbox_inches='tight')
                    # Delete CSV File
                    self.delete_file(filename)

                except (IOError, ValueError):
                    print("Error: There Have File does not appear to exist.")
                    axes4.figure.savefig('{}.png'.format(filename), bbox_inches='tight')
                    # Delete CSV File

        except (IOError):
            print("Error: There Have File does not appear to exist.")
            axes4.figure.savefig('{}.png'.format(filename), bbox_inches='tight')
            # Delete CSV File

        self.draw()

    def delete_file(self, name):
        remove(name + "-show-memory-statistic.csv")
        remove(name + "-show-process-cpu.csv")
        remove(name + "-show-version.csv")
        remove(name + "-show-env.csv")
        remove(name + "-show-flash.csv")


class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.setWindowTitle("Network Automation")
        self.setFixedSize(350, 500)

        # button generate and add
        self.btgenerate = QPushButton(self)
        self.btgenerate.setText('Generate')
        self.btgenerate.setFixedWidth(70)

        # Processs textedit

        self.process = QTextEdit(self)
        self.process.setFixedWidth(350)
        self.process.setLineWrapColumnOrWidth(400)
        self.process.setLineWrapMode(QTextEdit.FixedPixelWidth)
        self.process.setReadOnly(True)

        self.cv = MplCanvas()

        layout = QGridLayout(self)
        layout.addWidget(self.btgenerate, 0, 0)
        layout.addWidget(self.process, 1, 0)

        self.btgenerate.clicked.connect(self.runThread)

    def onUpdateText(self, text):
        cursor = self.process.textCursor()
        cursor.movePosition(QTextCursor.End)
        cursor.insertText(text)
        self.process.setTextCursor(cursor)
        self.process.ensureCursorVisible()

    def runThread(self):
        self.process.setText('')
        self.run_thread = sshConnection()
        self.run_thread.finishedFSM.connect(self.cv.graph)
        self.run_thread.start()


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    app.setStyle('cleanlooks')
    window = Widget()
    sys.stdout = Stream(newText=window.onUpdateText)
    window.show()
    sys.exit(app.exec_())

Screenshot: 截图:

在此处输入图片说明

Switch-1.png 开关1.png

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM