PyQtGUIの複数列のレイアウトに複数のmatplotlibプロットを埋め込もうとしています。一見、必要に応じてレイアウトを設定することに成功しましたが、いずれかのキャンバス上でマウスを動かすと、サイズと「ちらつき」が変わります。ツールバーのズームボタンを押すと、これがより顕著になります。
matplotlibキャンバスごとに、ツールバーを接続しました。ツールバーを接続しないと、問題は発生しません。QGridLayoutまたはネストされたQVBoxLayoutsとQHBoxLayoutsを使用して、ツールバーとキャンバスをいくつかの方法で配置してみました。いずれにせよ、互いに並んでプロットがある場合、問題が発生します。すべてのプロットを1つの列に配置しても、そうではありません。
これをWindowsのPython3.6(Anaconda 5.0.1)、LinuxのPyQt4とPython 3.5.2(KDE Neon 64ビット)、およびPyQt4とPyQt5(v。5.7.1)の両方、matplotlib 1.5.1で試しましたが、同じ結果。add_subplotの代わりにadd_axesを使用してみました。誰かがこれを引き起こしている原因を理解したり、何らかの回避策を見つけたりするのを手伝ってもらえますか?matplotlibサブプロットを使用できません。
from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
figure1 = Figure()
figure2 = Figure()
figure3 = Figure()
figure4 = Figure()
canvas1 = FigureCanvas(figure1)
canvas2 = FigureCanvas(figure2)
canvas3 = FigureCanvas(figure3)
canvas4 = FigureCanvas(figure4)
ax1 = figure1.add_subplot(111)
ax2 = figure2.add_subplot(111)
ax3 = figure3.add_subplot(111)
ax4 = figure4.add_subplot(111)
toolbar1 = NavigationToolbar(canvas1, self)
toolbar2 = NavigationToolbar(canvas2, self)
toolbar3 = NavigationToolbar(canvas3, self)
toolbar4 = NavigationToolbar(canvas4, self)
mainLayout = QtWidgets.QGridLayout()
mainLayout.addWidget(toolbar1,0,0)
mainLayout.addWidget(toolbar2,0,1)
mainLayout.addWidget(toolbar3,2,0)
mainLayout.addWidget(toolbar4,2,1)
mainLayout.addWidget(canvas1,1,0)
mainLayout.addWidget(canvas2,1,1)
mainLayout.addWidget(canvas3,3,0)
mainLayout.addWidget(canvas4,3,1)
self.setLayout(mainLayout)
self.setWindowTitle("Flow Layout")
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mainWin = Window()
mainWin.show()
sys.exit(app.exec_())
同様の問題があり、次の方法で解決しました。
toolbar1.setMinimumWidth(canvas1.width())
toolbar2.setMinimumWidth(canvas2.width())
toolbar3.setMinimumWidth(canvas3.width())
toolbar4.setMinimumWidth(canvas4.width())
問題は、ツールバーがキャンバスよりも広くなる場合です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加