【发布时间】:2014-05-03 03:00:47
【问题描述】:
我使用 QT Designer 在 PyQt 中创建了一个小应用程序。我有一些按钮,“绘图”按钮在 4 个不同的小部件上创建 4 个绘图。 “清除”按钮必须清除这 4 个图。我尝试编写一些代码,但它不运行。如何创建这个清除按钮?谢谢。
这是我的应用程序的主要部分:
import sys
from Import_fsa import import_fsa
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QFileDialog
from Vannucci_Gemignani import Ui_MainWindow
class GUI_fsa(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui=Ui_MainWindow()
self.ui.setupUi(self)
self.ui.Button_Browse.clicked.connect(self.Browse)
self.ui.Button_Plot.clicked.connect(self.Plot)
self.ui.Button_Clear.clicked.connect(self.Clear)
def Browse(self):
fname=QFileDialog.getOpenFileName()
if fname=='': #se non viene selezionato nessun file, fname è
return #nullo, generando quindi un errore nell'import fsa
self.ui.lineEdit.setText(fname)
def Plot(self):
if self.ui.lineEdit.text()=='':
QtGui.QMessageBox.information(None,'Warning','Select fsa File',QtGui.QMessageBox.Ok)
return
data_set=import_fsa(self.ui.lineEdit.text())
self.ui.widget.canvas.ax.clear()
self.ui.widget_2.canvas.ax.clear()
self.ui.widget_3.canvas.ax.clear()
self.ui.widget_4.canvas.ax.clear()
self.ui.widget.canvas.ax.plot(data_set[0])
self.ui.widget_2.canvas.ax.plot(data_set[1])
self.ui.widget_3.canvas.ax.plot(data_set[2])
self.ui.widget_4.canvas.ax.plot(data_set[3])
self.ui.widget.canvas.draw()
self.ui.widget_2.canvas.draw()
self.ui.widget_3.canvas.draw()
self.ui.widget_4.canvas.draw()
def Clear(self):
self.ui.widget.canvas.ax.clear()
self.ui.widget_2.canvas.ax.clear()
self.ui.widget_3.canvas.ax.clear()
self.ui.widget_4.canvas.ax.clear()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
MainWindow = GUI_fsa()
MainWindow.show()
sys.exit(app.exec_())
【问题讨论】:
-
PyQt 代码对我来说看起来不错。按钮连接正确:您可以通过将
print("clear")放在Clear方法的顶部自行检查。所以matplotlib的东西一定有问题(我不是很熟悉)。 -
我输入了 print('clear'),当我单击 Push Button 时,我可以在 Python 控制台上看到 'print'。所以Push button运行良好但图不清楚。
-
我对matplotlib了解不多,但是如果你搜索SO,你应该可以找到答案。试试this question 和this one。
-
不幸的是,我的清除按钮仍未运行。很奇怪,网上有很多例子,都用我这样的代码。
-
你能提供一个更简单、独立的例子来说明问题吗?您当前的示例无法测试,因为缺少
Import_fsa模块。