2017-01-10 69 views
0

我試圖從QtGui使用對話來獲取用戶的一些輸入。 對於QFileDialog,它可以像我預期的那樣工作,但是當我使用QInputDialog時,會彈出對話框並繼續執行代碼,而無需等待用戶輸入。 下面是一個簡單的例子:如何將QInputDialog設置爲模式

from PyQt4 import QtGui 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from numpy import pi 

class Canvas(FigureCanvas): 
    def __init__(self):   
     self.fig = Figure() 
     FigureCanvas.__init__(self, self.fig) 

     self.fig.canvas.mpl_connect('key_press_event',self.key_pressed) 
     self.fig.canvas.mpl_connect('button_press_event',self.on_left_click) 

     self.ax = self.fig.add_axes([0,0,1,1]) 
     self.figure.canvas.show() 

    def key_pressed(self, event): 
     if event.key == 'f': 
      fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file', 
              'c:\\',"Image files (*.png *.jpg *.gif)") 
      print fname 

    def on_left_click(self,event): 
     # If the mouse pointer is not on the canvas, ignore buttons 
     if not event.inaxes: return 

     if event.button==1: 
      x=event.xdata 
      y=event.ydata 
      r, ok = QtGui.QInputDialog.getDouble(self, 'Text Input Dialog', 'Enter radius:', 10) 
      if ok: 
       self.ax.scatter(x, y, s=pi*r**2,c=0.5) 
       self.draw() 

cnv = Canvas() 

回答

0

我試着用PySide而不是PyQt4的複製本。你的代碼只是打開畫布小部件,然後立即關閉它並退出。這意味着應用程序事件循環未正常運行。

嘗試改變你的最後一行:

app = QtGui.QApplication([]) 
cnv = Canvas() 
app.exec_() 

有了這個一切正常。

+0

現在有用,謝謝。 (我在Spyder內部開始它的開放。) – Tomas

相關問題