如何通过单击显示qt对话框

时间:2016-10-20 21:26:20

标签: python qt dialog popup

所以我编写了一个程序,当你点击图中的一个点时,会打开一个带有具体坐标的窗口。现在我希望当我点击它打开的图中的任何一点时,还有一个窗口(我之前用Qt设计师设计),它只显示一个空图。我该怎么做? 这是剧本:

from PyQt4.uic import loadUiType
from PyQt4 import QtCore, QtGui, uic

from PyQt4.QtGui import QApplication, QDialog

from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import (
    FigureCanvasQTAgg as FigureCanvas,
    NavigationToolbar2QT as NavigationToolbar)
import matplotlib.pyplot as plt
import sys

Ui_MainWindow, QMainWindow = loadUiType('window.ui')

class Main(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__()
        self.setupUi(self)
        self.fig_dict = {}
        self.ax_dict = {}

        self.mplfigs.itemClicked.connect(self.changefig)

         fig = Figure()
         self.addmpl(fig)

    def changefig(self,item):
        text = item.text()
        self.rmmpl()
        self.addmpl(self.fig_dict[str(text)])

    def addfig(self, name, fig, ax):
        self.fig_dict[name] = fig
        self.ax_dict[name] = ax
        self.mplfigs.addItem(name)

    def addmpl(self, fig):
        self.canvas = FigureCanvas(fig)
        self.mplvl.addWidget(self.canvas)
        self.canvas.draw()

        self.toolbar = NavigationToolbar(self.canvas, 
                 self.mplwindow, coordinates=True)
        self.mplvl.addWidget(self.toolbar)

        self.canvas.mpl_connect('pick_event', self.on_pick)

    def rmmpl(self):
        self.mplvl.removeWidget(self.canvas)
        self.canvas.close()
        self.mplvl.removeWidget(self.toolbar)
        self.toolbar.close()

    def on_pick(self, event):        
        print('On Pick!')
        thisline = event.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = event.ind
        print(ind)
        msg = str(xdata) + ' ' + str(ydata)
        points = tuple(zip(xdata[ind], ydata[ind]))
        myString = "got data %s, %s" % (str(xdata[ind]),str(ydata[ind]))
        print('onpick points:', points)

        QtGui.QMessageBox.information(self, "Click!", '' + myString)

        ax1f1 = self.ax_dict['One plot']

        highlighted_point = ax1f1.plot(xdata[ind],ydata[ind], marker='s',        color='k',markersize=15)
        self.canvas.draw()


        open ('window.ui')
        try:
            _fromUtf8 = QtCore.QString.fromUtf8
        except AttributeError:
            _fromUtf8 = lambda s: s
        class Ui_Dialog(object):
            def setupUi(self, Dialog):
                Dialog.setObjectName(_fromUtf8("Dialog"))
                Dialog.resize(347, 249)
                self.gridLayout = QtGui.QGridLayout(Dialog)
                self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
                self.qwtPlot = Qwt5.QwtPlot(Dialog)
                self.qwtPlot.setObjectName(_fromUtf8("qwtPlot"))
                self.gridLayout.addWidget(self.qwtPlot, 0, 0, 1, 1)

                self.retranslateUi(Dialog)
                QtCore.QMetaObject.connectSlotsByName(Dialog)

            def retranslateUi(self, Dialog):
                Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog",    "Dialog", None, QtGui.QApplication.UnicodeUTF8))

        from PyQt4 import Qwt5        



        self.dialog = Ui_Dialog()
        self.dialog.show()




if __name__ == '__main__':
    import sys
    from PyQt4 import QtGui


# If you want to display concrete POINTS:
    x_series_1 = [4,1,2,3 ,4,5]
    y_series_1 = [4,3,9,27,54,63]

    x_series_2 = [4,2,4,6,8,10]
    y_series_2 = [4,4,8,12,16,18]

# If you want to display a FUNCTION:
    x_series_3 = [1,5,10,15,20,25]
    y_series_3 = [x**2 for x in x_series_3]

    x_series_4 = [1,2,3,4,5,6]
    y_series_4 = [x**3 for x in x_series_4]

    fig1 = Figure()
    fig1=plt.figure()
    ax1f1 = fig1.add_subplot(111)
    ax1f1.plot(x_series_1, y_series_1, marker='s', linestyle='-',   color='k',picker = 5)
    ax1f1.plot(x_series_2, y_series_2, marker='s', linestyle='-', color='k',picker = 5)
    ax1f1.plot(x_series_3, y_series_3, marker='s', linestyle='-', color='k',picker = 5)
    ax1f1.plot(x_series_4, y_series_4, marker='s', linestyle='-', color='k',picker = 5)
   #ax1f1.plot(x_series_1, y_series_1)

    # If you want to display concrete POINTS:
    ax1f1.plot(x_series_1, y_series_1, label="Graph 1")
    ax1f1.plot(x_series_2, y_series_2, label="Graph 2")

    # If you want to dispay a FUNCTION:
    ax1f1.plot(x_series_3, y_series_3, label="Graph 3")
    ax1f1.plot(x_series_4, y_series_4, label="Graph 4")

    #create legend
    ax1f1.legend(loc="upper left")

    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.addfig('One plot', fig1,ax1f1)
    print main.fig_dict
    main.show()
    sys.exit(app.exec_())

0 个答案:

没有答案