我正在开发一个非常简单的界面来探索/绘制csv文件。我的目标是最终探索,而不是建立软件,因为我不是开发人员,更像是一个绝望的用户" : - )
我正在利用找到的代码in this example
这是我在Python和GUI中的第一步,所以我倾向于在我的调用中放置打印消息,以便我可以或多或少地跟踪发生的事情。如果我从Spyder中运行代码,这就是我发现奇怪行为的地方。
import sys
import os
from PyQt4 import QtGui
import pandas as pd
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
import matplotlib.pyplot as plt
# QtGui.QDialog
class Window(QtGui.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
# a figure instance to plot on
self.figure = plt.figure()
# this is the Canvas Widget that displays the `figure`
# it takes the `figure` instance as a parameter to __init__
self.canvas = FigureCanvas(self.figure)
# this is the Navigation widget
# it takes the Canvas widget and a parent
self.toolbar = NavigationToolbar(self.canvas, self)
# Just some extra button to mess around
self.button= QtGui.QPushButton('Push Me')
self.button.clicked.connect(self.do_print)
# set the layout
layout = QtGui.QVBoxLayout()
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
layout.addWidget(self.button)
self.setLayout(layout)
def do_print(self):
print('Hello World!!')
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
奇怪的是,如果我按下按钮,Ipython控制台上什么也没发生。我第二次推,然后两个" Hello World!"打印出现。
另一方面,如果我只是从Windows Shell中启动我的脚本:
python my_simple_test.py
然后一切都按预期工作。
我在Spyder中做错了什么?
谢谢, 米歇尔
答案 0 :(得分:0)
IPython缓冲stdout与终端有点不同。当打印某些内容时,它会查看自上次刷新缓冲区以来已经过了多长时间,如果它超过某个阈值,则会再次刷新它。因此,第二次单击按钮时,它会刷新标准输出,并且您会看到两个输出。
您可以强制它立即冲洗:
print('Hello World!!')
sys.stdout.flush()