【发布时间】:2015-02-06 06:43:08
【问题描述】:
当用户通过“button_press_event”点击画布时,我正在使用 QMenu 创建上下文菜单。但是,我在弄清楚如何将按钮按下事件的 x/y 坐标转换为正确的格式以便正确放置 Qmenu 时遇到了一些麻烦。
下面的代码可以工作,但是确定菜单位置的部分看起来有点难看,我想知道是否有更好的方法来放置 Qmenu。特别是我必须从画布高度中减去 Y 坐标的地方。这可以在某处用反转方法代替吗?
确定位置:
canvasSize = event.canvas.geometry()
Qpoint_click = event.canvas.mapToGlobal(QtCore.QPoint(event.x,canvasSize.height()-event.y))
完整代码:
import sys
from PyQt4 import QtGui, QtCore
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
class menuTest(QtGui.QMainWindow):
def __init__(self):
super(menuTest, self).__init__()
self.mplFig = MplGrapher() #Matplotlib plot
self.mplFig.canvas.mpl_connect('button_press_event', self.on_press)
self.setCentralWidget(self.mplFig)
self.show()
def on_press(self,event):
canvasSize = event.canvas.geometry()
Qpoint_click = event.canvas.mapToGlobal(QtCore.QPoint(event.x,canvasSize.height()-event.y))
self.lineMenu= QtGui.QMenu()
self.lineMenu.addAction("Test Menu")
self.lineMenu.move(Qpoint_click)
self.lineMenu.show()
class MplGrapher(QtGui.QWidget):
def __init__(self,parent=None):
super(MplGrapher, self).__init__(parent)
self.initFigure()
def initFigure(self):
self.figure = Figure()
self.canvas = FigureCanvas(self.figure)
self.axL = self.figure.add_subplot(111)
self.axL.grid(True)
self.navbar = NavigationToolbar(self.canvas, self)
self.layout = QtGui.QVBoxLayout()
self.layout.addWidget(self.navbar)
self.layout.addWidget(self.canvas)
self.setLayout(self.layout)
def main():
app = QtGui.QApplication(sys.argv)
ex = menuTest()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
【问题讨论】:
标签: python matplotlib pyqt pyqt4