Я создаю участок Найквиста в PyQwt. В настоящее время он работает, за исключением того, что мне нужно перевернуть ось y - соглашение имеет ноль внизу и увеличивает отрицательные числа по мере продвижения.PyQwt Invert Axis (или, устанавливая атрибуты PyQwt)
Я знаю, как вы это сделаете на C++, но не можете понять, как это сделать в Python. Я не совсем понимаю, как Qt/Qwt переводится в PyQt/PyQwt. Согласно http://qwt.sourceforge.net/class_qwt_scale_engine.html, установлен атрибут Inverted
. В C++, это будет выглядеть так:
ui.plotWidget->axisScaleEngine(QwtPlot::yLeft)->setAttribute(QwtScaleEngine::Inverted, true);
Я не могу понять, способ сделать это, я попробовал несколько подходов в моем основном окне __init__(self)
:
self.ui.qwtPlot.setAxisTitle(Qwt.QwtPlot.yLeft, 'Imaginary Impedance')
self.ui.qwtPlot.setAxisScaleEngine(Qwt.QwtPlot.yLeft, Qwt.QwtScaleEngine.Inverted))
# TypeError: QwtPlot.setAxisScaleEngine(): argument 2 has unexpected type 'Attribute'
self.ui.qwtPlot.setAxisScaleEngine(Qwt.QwtPlot.yLeft, Qwt.QwtScaleEngine.setAttribute(Inverted))
# NameError: global name 'Inverted' is not defined
self.ui.qwtPlot.setAxisScaleEngine(Qwt.QwtPlot.yLeft, Qwt.QwtScaleEngine.setAttribute(Qwt.QwtScaleEngine.Inverted)
# TypeError: QwtScaleEngine.setAttribute(): first argument of unbound method must have type 'QwtScaleEngine'
I также пытался определить новый класс, как это было сделано в http://sourceforge.net/p/pyqwt/patches/1/, как:
class InvertedAxisEngine(Qwt.QwtScaleEngine):
def __init__(self):
Qwt.QwtScaleEngine.__init__(self)
self.setAttribute(Qwt.QwtScaleEngine.Inverted)
# back in Window.__init__(self)
self.ui.qwtPlot.setAxisScaleEngine(Qwt.QwtPlot.yLeft, InvertedAxisEngine)
#TypeError: QwtPlot.setAxisScaleEngine(): argument 2 has unexpected type 'PyQt4.QtCore.pyqtWrapperType'
self.ui.qwtPlot.setAxisScaleEngine(Qwt.QwtPlot.yLeft, InvertedAxisEngine())
# NotImplementedError: QwtScaleEngine.divideScale() is abstract and must be overridden
#NotImplementedError: QwtScaleEngine.transformation() is abstract and must be overridden
Я получаю чувство, что я делаю это слишком сложно.
EDIT - комментарий ниже вдохновило пару вещей, как добавление =True
к Inverted
(Нету, нет аргументов ключевых слов, и я также попробовал это, который идет сделать к в unexpected type
(обертка)
self.ui.inverted_engine = Qwt.QwtScaleEngine
self.ui.inverted_engine.Inverted = True
self.ui.qwtPlot.setAxisScaleEngine(Qwt.QwtPlot.yLeft, self.ui.inverted_engine)
. у меня нет переводчика оперативного доступа в то время как графический интерфейс работает, но я добавил print dir(Qwt.QwtScaleEngine)
к инициализации, и это, безусловно, существует:. ['Attribute', 'Floating', 'IncludeReference', 'Inverted', 'NoAttribute', 'Symmetric', '__class__',....
Вы пробовали 'self.ui.qwPlot.axisScaleEngine (Qwt.QwtPlot.yLeft) .setAttribute (Qwt.QwtScaleEngine.Inverted, правда)'? Вы также можете попробовать прямо из окна консоли python, например, распечатать 'dir (Qwt.QwtScaleEngine)', чтобы узнать, определено ли это. – Schollii
Я получаю синтаксическую ошибку для этого кода. (Я попытался добавить несколько парнеров, добавив 't' обратно в qwtPlot [первый]). Это вдохновило пару других вещей, которые не сработали, см. Править выше. – schodge