matrapotlib 그래프를 FigureurCanvas로 설정 한 다음 FigureurCanvas를 내 AppWindow에 추가하는 앱이 있습니다. 그리드가 드래그 가능하도록 설정했습니다. 그러나 그래프를 드래그하면 그것이 포함 된 창이 그대로 유지되어 그래프가 창 밖으로 드래그됩니다. 그래프를 움직이면 윈도우가 함께 움직일 때 두 가지를 묶는 방법이 있습니까? 여기에 코드가 있습니다.캔버스를 pyqt로 끌 때 캔버스를 바운더리합니다.
from PyQt4 import QtCore
from PyQt4 import QtGui
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
class GraphCanvas(FigureCanvas):
def __init__(self):
# The window
self.fig = Figure(figsize=(5, 5), dpi=100)
self.ax1 = self.fig.add_subplot(111)
self.ax1.plot([1,2,3], [1,2,3], linewidth=2, color="#c6463d", label="line1")
FigureCanvas.__init__(self, self.fig)
# drag properties
self.draggable = True
self.dragging_threshold = 5
self.__mousePressPos = None
self.__mouseMovePos = None
def mousePressEvent(self, event):
if self.draggable and event.button() == QtCore.Qt.LeftButton:
self.__mousePressPos = event.globalPos() # global
self.__mouseMovePos = event.globalPos() - self.pos() # local
super(GraphCanvas, self).mousePressEvent(event)
def mouseMoveEvent(self, event):
if self.draggable and event.buttons() & QtCore.Qt.LeftButton:
globalPos = event.globalPos()
moved = globalPos - self.__mousePressPos
if moved.manhattanLength() > self.dragging_threshold:
# move when user drag window more than dragging_threshould
diff = globalPos - self.__mouseMovePos
self.move(diff)
self.__mouseMovePos = globalPos - self.pos()
super(GraphCanvas, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
if self.__mousePressPos is not None:
if event.button() == QtCore.Qt.LeftButton:
moved = event.globalPos() - self.__mousePressPos
if moved.manhattanLength() > self.dragging_threshold:
# do not call click event or so on
event.ignore()
self.__mousePressPos = None
super(GraphCanvas, self).mouseReleaseEvent(event)
''' End Class '''
class AppWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(AppWindow, self).__init__(parent)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
layout = QtGui.QVBoxLayout(self)
cpu_canvas = GraphCanvas()
layout.addWidget(cpu_canvas)
''' End Class'''
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
main = AppWindow()
main.show()
sys.exit(app.exec_())
코드가 기대하는 바를 구체적으로 설명해야합니다. 그래프가 움직이지 않게하려면 왜 그래프를 드래그 가능하게 만드나요? 창을 이동하기 위해서는 프레임이 없도록 이동하고 제목 표시 줄을 사용하여 이동할 수 있습니다. 결국 당신이 원하는 것을 정확하게 설명해야합니다. – ImportanceOfBeingErnest
@ImportanceOfBeingErnest 저는 CPU 사용량을 표시하는 데스크탑 위젯을 만들고 그것을 드래그하여 화면에서 움직일 수 있기를 원합니다. 여기에 내가 가지고있는 이미지가 있습니다. (http://imgur.com/rm2RasQ) 현재 드래그 할 때 그래프 위젯은 잘 움직이지만 부모 창이 이동하지 않고 그래프가 가장자리에서 벗어납니다. 창문이 보이지 않게된다. [link] (http://imgur.com/a/qyeeK). 이게 말이 돼? – HexxNine
또는 드래그 기능을 기본 창에 추가하면 모든 것이 잘 움직이지만 위젯이 그 중 99 %를 넘기 때문에 창을 차지할 여지가 거의 없습니다. – HexxNine