class myApp2(QWidget, photoManager): def __init__(self, parent=None): super(myApp2, self).__init__(parent) self.setWindowTitle("selecting") self.initUI() def initUI(self): hbox = QHBoxLayout() self.drawView = QGraphicsView(self) self.view = GraphicsView(self.drawView, self) self.drawView.setMouseTracking(True) self.view.setMouseTracking(True) self.rd = rdButton(self.view) vbox = QVBoxLayout() vbox.addWidget(self.rd) vbox.addStretch(1) hbox.addWidget(self.view) hbox.addWidget(self.drawView) frame = QFrame() frame.setLayout(vbox) hbox.addWidget(frame) self.setLayout(hbox) #self.view.mouseHoverEvent() #self.drawView.mouseHoverEvent() def mouseHoverEvent(self, e): print("hovering") def connectRB(self): return (self.rd._button_group.checkedId()) def setImage(self): self.view.setImage() def valuechange(self): sender = self.sender() self.cvImage = self.editIm(self.view.cvogImage, sender.objectName(), sender.value()) image = QImage(self.cvImage, self.cvImage.shape[1], self.cvImage.shape[0], self.cvImage.shape[1] * 3, QImage.Format_RGB888) self.pixmap = QPixmap(image) self.pixmap = self.pixmap.scaled(self.view.imageScaled.width(), self.view.imageScaled.height(), Qt.KeepAspectRatio) self.updatePixmap(self.pixmap) def updatePixmap(self, pixmap): self.view.pixmapItem.setPixmap(pixmap)
def __init__(self, app, style): # constructor of QMainWindow super().__init__() self.checkEnvironment() # set application wide attributes # access via "QtCore.QCoreApplication.instance().xxx" # helps to overcome nested usage of "parent" self.app = app self.app.mainwindow = self # identify platform (one of Windows, Linux, or Darwin for macOS) self.platform = platform.system() self.style = style # styles do not work anymore; need to come back # style_keys = [x.lower() for x in QtWidgets.QStyleFactory.keys()] # FIXME # FIXME currently leads to segmentation faults # FIXME # if self.style.lower() in style_keys: # QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create(style)) # holds active airfoil self.airfoil = None # container for all loaded airfoils self.airfoils = list() self.scene = GraphicsScene.GraphicsScene(self) self.view = GraphicsView.GraphicsView(self, self.scene) self.view.viewstyle = VIEWSTYLE # prepare additional views for tabs in right splitter window self.contourview = ContourAnalysis.ContourAnalysis(canvas=True) # create slots (i.e. handlers or callbacks) self.slots = GuiSlots.Slots(self) # set central widget for the application self.centralwidget = CentralWidget(self) self.setCentralWidget(self.centralwidget) # add a shortcut for toggling the message window sc = ShortCuts.ShortCuts(self) sc.addShortcut('ALT+m', 'toggleLogDock', 'shortcut') # shortcut for test items sc.addShortcut('ALT+t', 'toggleTestObjects') # initialize test items (checked in toggleTestObjects) self.testitems = False # setup user interface and menus self.init_GUI() # prepare logger Logger.log(self)
def initUI(self): hbox = QHBoxLayout() self.drawView = QGraphicsView(self) self.view = GraphicsView(self.drawView, self) self.drawView.setMouseTracking(True) self.view.setMouseTracking(True) self.rd = rdButton(self.view) vbox = QVBoxLayout() vbox.addWidget(self.rd) vbox.addStretch(1) hbox.addWidget(self.view) hbox.addWidget(self.drawView) frame = QFrame() frame.setLayout(vbox) hbox.addWidget(frame) self.setLayout(hbox)
def __init__(self, parent=None): super(Mainwindow, self).__init__(parent) self.setupUi(self) self.graphicsView = GraphicsView() self.verticalLayout_5.addWidget(self.graphicsView) self.graphicsView.setGeometry(0, 0, 874, 600) self.viewwidth = self.graphicsView.width() self.viewheight = self.graphicsView.height() self.scene = QGraphicsScene() self.scene.setSceneRect(-self.viewwidth * 100, -self.viewheight * 100, self.viewwidth * 200, self.viewheight * 200) # 这样就不会被大小限制住,这样scene可以随着view的变化而变化。 self.graphicsView.setScene(self.scene) self.deleteitemsx = [] self.deleteitemsy = [] self.circleitem = [] self.axisitemx = [] self.axisitemy = [] self.textitemx = [] self.textitemy = [] self.sc = 1 self.lastsc = 1 self.sumscale = 1 self.jishu = 1 self.start = 0 self.fenmiao = 1 self.NS = 'N' self.WE = 'E' self.addorigin = False self.xiugaihouzuobiao = None self.origin = None self.listpositionexample = None self.addpositionexample = None self.updateUi() self.connect(self.filedefault, SIGNAL('triggered()'), self.configure)
def init_ui(self, directory): # UI style QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('macintosh')) # UI position self.move(0, 0) self.resolution = QtGui.QDesktopWidget().availableGeometry() self.setGeometry(self.resolution) self.showFullScreen() # UI components self.splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) # pane1 self.left = QtGui.QFrame(self) self.left.setFrameShape(QtGui.QFrame.StyledPanel) self.scene = QtGui.QGraphicsScene() self.view = GraphicsView(None, self.scene, self.left) self.view.setDragMode(QtGui.QGraphicsView.ScrollHandDrag) self.view.setMinimumSize(.8*self.resolution.width(), self.resolution.height()) self.view.setCacheMode(QtGui.QGraphicsView.CacheBackground) self.view.setViewportUpdateMode(QtGui.QGraphicsView.BoundingRectViewportUpdate) self.splitter.addWidget(self.view) # pane2 self.right = QtGui.QSplitter(QtCore.Qt.Vertical) self.right_top_model = QtGui.QDirModel() self.right_top_model.setNameFilters(['*.png']) self.right_top_model.setFilter(QtCore.QDir.AllDirs|QtCore.QDir.Files| QtCore.QDir.NoDotAndDotDot|QtCore.QDir.CaseSensitive) self.right_top_model.setSorting(QtCore.QDir.Name|QtCore.QDir.DirsFirst) self.right_top_tree = FileTree(self.right_top_model, directory) QtCore.QObject.connect(self.right_top_tree, QtCore.SIGNAL("clicked(QModelIndex)"), self.right_top_clicked) self.right.addWidget(self.right_top_tree) self.right_bottom_tree = FileTree(None, directory) QtCore.QObject.connect(self.right_bottom_tree, QtCore.SIGNAL("clicked(QModelIndex)"), self.right_bottom_clicked) self.right.addWidget(self.right_bottom_tree) self.splitter.addWidget(self.right) self.setCentralWidget(self.splitter)
elif nd == 2: m = np.array(self.copyDataTo()).reshape(4,4) m[2] = m[3] m[:,2] = m[:,3] return m[:3,:3] else: raise Exception("Argument 'nd' must be 2 or 3") if __name__ == '__main__': import widgets import GraphicsView from functions import * app = QtGui.QApplication([]) win = QtGui.QMainWindow() win.show() cw = GraphicsView.GraphicsView() #cw.enableMouse() win.setCentralWidget(cw) s = QtGui.QGraphicsScene() cw.setScene(s) win.resize(600,600) cw.enableMouse() cw.setRange(QtCore.QRectF(-100., -100., 200., 200.)) class Item(QtGui.QGraphicsItem): def __init__(self): QtGui.QGraphicsItem.__init__(self) self.b = QtGui.QGraphicsRectItem(20, 20, 20, 20, self) self.b.setPen(QtGui.QPen(mkPen('y'))) self.t1 = QtGui.QGraphicsTextItem(self) self.t1.setHtml('<span style="color: #F00">R</span>')
def setupMainWindow(self): self.setWindowTitle("main window") self.setMinimumSize(QtCore.QSize(900, 700)) self.setMaximumSize(QtCore.QSize(1000, 100)) self.gridLayout = QtWidgets.QGridLayout(self) # menu horizontalLayout_1 = QHBoxLayout() spacerItem = QSpacerItem(100, 100, QSizePolicy.Minimum, QSizePolicy.Expanding) self.shutterButton = QPushButton('shutter', self) self.AOTFButton = QPushButton('AOTF', self) self.GalvoButton = QPushButton('Galvo', self) self.StageButton = QPushButton('stage', self) self.DMButton = QPushButton('DM', self) horizontalLayout_1.addWidget(self.shutterButton) horizontalLayout_1.addItem(spacerItem) horizontalLayout_1.addWidget(self.AOTFButton) horizontalLayout_1.addItem(spacerItem) horizontalLayout_1.addWidget(self.GalvoButton) horizontalLayout_1.addItem(spacerItem) horizontalLayout_1.addWidget(self.DMButton) horizontalLayout_1.addItem(spacerItem) horizontalLayout_1.addWidget(self.StageButton) horizontalLayout_1.addItem(spacerItem) self.gridLayout.addLayout(horizontalLayout_1, 0, 0, 1, 4) # handle live liveGroupBox = QGroupBox("live box", self) verticalLayout_l = QVBoxLayout(liveGroupBox) # camera exposure horizontalLayout_l2 = QHBoxLayout() horizontalLayout_l22 = QHBoxLayout() label_cam_expo = QLabel("cam_exposure", liveGroupBox) self.cam_expo = QDoubleSpinBox(liveGroupBox) self.cam_expo.setDecimals(0) self.cam_expo.setMinimum(5) self.cam_expo.setMaximum(1000) self.cam_expo.setValue(50) self.set_expo = QPushButton('set', liveGroupBox) horizontalLayout_l2.addWidget(label_cam_expo) horizontalLayout_l2.addWidget(self.cam_expo) horizontalLayout_l2.addWidget(self.set_expo) #live button and autoscale button horizontalLayout_l4 = QHBoxLayout() self.liveButton = QPushButton('live', self) self.liveButton.setCheckable(True) self.autoscalebutton = QPushButton("autoscale", liveGroupBox) horizontalLayout_l4.addWidget(self.liveButton) horizontalLayout_l4.addWidget(self.autoscalebutton) horizontalLayout_15 = QHBoxLayout() label = QLabel('max', liveGroupBox) self.slider_up = QSlider(QtCore.Qt.Horizontal, self) self.slider_up.setRange(150, 10000) self.max_label = QLabel() horizontalLayout_15.addWidget(label) horizontalLayout_15.addWidget(self.slider_up) horizontalLayout_15.addWidget(self.max_label) horizontalLayout_16 = QHBoxLayout() label_ = QLabel('min', liveGroupBox) self.slider_down = QSlider(QtCore.Qt.Horizontal, self) self.slider_down.setRange(0, 1000) self.min_label = QLabel() horizontalLayout_16.addWidget(label_) horizontalLayout_16.addWidget(self.slider_down) horizontalLayout_16.addWidget(self.min_label) horizontalLayout_17 = QHBoxLayout() label_peaks = QLabel('peaks count', liveGroupBox) self.label_counts = QLabel() horizontalLayout_17.addWidget(label_peaks) horizontalLayout_17.addWidget(self.label_counts) verticalLayout_l.addLayout(horizontalLayout_l2) verticalLayout_l.addLayout(horizontalLayout_l22) #verticalLayout_l.addLayout(horizontalLayout_l3) #verticalLayout_l.addLayout(horizontalLayout_l33) verticalLayout_l.addLayout(horizontalLayout_l4) verticalLayout_l.addLayout(horizontalLayout_15) verticalLayout_l.addLayout(horizontalLayout_16) verticalLayout_l.addLayout(horizontalLayout_17) liveGroupBox.setLayout(verticalLayout_l) self.gridLayout.addWidget(liveGroupBox, 1, 0, 1, 1) # handle record recordGroupBox = QGroupBox("record box", self) verticalLayout_r = QVBoxLayout(recordGroupBox) # record one image horizontalLayout_one = QHBoxLayout() self.one_record_button = QPushButton('record one frame', self) horizontalLayout_one.addWidget(self.one_record_button) #isolated record horizontalLayout_i1 = QHBoxLayout() self.IrecordButton = QPushButton('isolated_record', self) self.IrecordButton.setCheckable(True) horizontalLayout_i1.addWidget(self.IrecordButton) horizontalLayout_i2 = QHBoxLayout() label_Icam_expo = QLabel("cam_expo", recordGroupBox) self.Icam_expo = QDoubleSpinBox(recordGroupBox) self.Icam_expo.setDecimals(0) self.Icam_expo.setMinimum(0) self.Icam_expo.setMaximum(200) self.Icam_expo.setValue(20) self.set_record_expo = QPushButton('set', recordGroupBox) horizontalLayout_i2.addWidget(label_Icam_expo) horizontalLayout_i2.addWidget(self.Icam_expo) horizontalLayout_i2.addWidget(self.set_record_expo) horizontalLayout_i3 = QHBoxLayout() label_file_type = QLabel('choose file type: ') self.file_type = QComboBox(recordGroupBox) self.file_type.addItems(['.tif', '.dax']) horizontalLayout_i3.addWidget(label_file_type) horizontalLayout_i3.addWidget(self.file_type) spacerItem = QSpacerItem(1, 1, QSizePolicy.Minimum, QSizePolicy.Expanding) #synchronous record # 405 horizontalLayout_r1 = QHBoxLayout() label_405_expo = QLabel("405_expo", recordGroupBox) self.r_405_expo = QDoubleSpinBox(recordGroupBox) self.r_405_expo.setDecimals(0) self.r_405_expo.setMinimum(0) self.r_405_expo.setMaximum(2000) self.r_405_expo.setValue(0) horizontalLayout_r1.addWidget(label_405_expo) horizontalLayout_r1.addWidget(self.r_405_expo) # 647 horizontalLayout_r2 = QHBoxLayout() label_647_expo = QLabel("647_expo", recordGroupBox) self.r_647_expo = QDoubleSpinBox(recordGroupBox) self.r_647_expo.setDecimals(0) self.r_647_expo.setMinimum(0) self.r_647_expo.setMaximum(2000) self.r_647_expo.setValue(800) horizontalLayout_r2.addWidget(label_647_expo) horizontalLayout_r2.addWidget(self.r_647_expo) # camera exposure horizontalLayout_r3 = QHBoxLayout() label_cam_expo = QLabel("cam_expo", recordGroupBox) self.rcam_expo = QDoubleSpinBox(recordGroupBox) self.rcam_expo.setDecimals(0) self.rcam_expo.setMinimum(5) self.rcam_expo.setMaximum(1000) self.rcam_expo.setValue(20) horizontalLayout_r3.addWidget(label_cam_expo) horizontalLayout_r3.addWidget(self.rcam_expo) # frames and cycles horizontalLayout_r4 = QHBoxLayout() label_frames = QLabel("frames", recordGroupBox) self.rframes = QDoubleSpinBox(recordGroupBox) self.rframes.setDecimals(0) self.rframes.setMinimum(1) self.rframes.setMaximum(100) self.rframes.setValue(40) label_cycles = QLabel("cycles", recordGroupBox) self.rcycles = QDoubleSpinBox(recordGroupBox) self.rcycles.setDecimals(0) self.rcycles.setMinimum(0) self.rcycles.setMaximum(1000) self.rcycles.setValue(1) horizontalLayout_r4.addWidget(label_frames) horizontalLayout_r4.addWidget(self.rframes) horizontalLayout_r4.addWidget(label_cycles) horizontalLayout_r4.addWidget(self.rcycles) #stage horizontalLayout_r5 = QHBoxLayout() label_range = QLabel("stage_range", recordGroupBox) self.range = QDoubleSpinBox(recordGroupBox) self.range.setDecimals(2) self.range.setMinimum(1) self.range.setMaximum(100) self.range.setValue(30.00) label_step = QLabel("step", recordGroupBox) self.step = QDoubleSpinBox(recordGroupBox) self.step.setDecimals(2) self.step.setMinimum(0) self.step.setMaximum(10) self.step.setValue(3.00) horizontalLayout_r5.addWidget(label_range) horizontalLayout_r5.addWidget(self.range) horizontalLayout_r5.addWidget(label_step) horizontalLayout_r5.addWidget(self.step) # record button horizontalLayout_r7 = QHBoxLayout() self.recordButton = QPushButton('syn_record', self) horizontalLayout_r7.addWidget(self.recordButton) #filename horizontalLayout_r6 = QHBoxLayout() label_file = QLabel("file name", recordGroupBox) self.name_text = QLineEdit('name your file', recordGroupBox) self.name_num = QDoubleSpinBox(recordGroupBox) self.name_num.setDecimals(0) self.name_num.setMinimum(1) self.name_num.setMaximum(1000) self.name_num.setValue(1) horizontalLayout_r6.addWidget(label_file) horizontalLayout_r6.addWidget(self.name_text) horizontalLayout_r6.addWidget(self.name_num) verticalLayout_r.addLayout(horizontalLayout_one) verticalLayout_r.addItem(spacerItem) verticalLayout_r.addLayout(horizontalLayout_i1) verticalLayout_r.addLayout(horizontalLayout_i2) verticalLayout_r.addLayout(horizontalLayout_i3) verticalLayout_r.addItem(spacerItem) verticalLayout_r.addLayout(horizontalLayout_r1) verticalLayout_r.addLayout(horizontalLayout_r2) verticalLayout_r.addLayout(horizontalLayout_r3) verticalLayout_r.addLayout(horizontalLayout_r4) verticalLayout_r.addLayout(horizontalLayout_r5) verticalLayout_r.addLayout(horizontalLayout_r6) verticalLayout_r.addLayout(horizontalLayout_r7) recordGroupBox.setLayout(verticalLayout_r) self.gridLayout.addWidget(recordGroupBox, 2, 0, 2, 1) # display image window self.livewindow = GraphicsView.QtCameraGraphicsView() self.scene = QtWidgets.QGraphicsScene(self) self.scene.setSceneRect(0, 0, 2048, 2048) self.item = GraphicsScene.QtCameraGraphicsItem(parent=self.scene) self.scene.addItem(self.item) self.livewindow.setScene(self.scene) #self.livewindow.setScaledContents(True) #data = np.ones((2048,2048), dtype=np.uint8) #pixmap = QtGui.QImage(data, 2048, 2048, QtGui.QImage.Format_Indexed8) #pixmap = QtGui.QPixmap.fromImage(pixmap) #self.item.updateImageWithFrame(pixmap) #self.livewindow.setPixmap(pixmap) self.gridLayout.addWidget(self.livewindow, 1, 1, 3, 1) horizontalLayout_message = QHBoxLayout() # message label self.message_label = QLabel('message', self) horizontalLayout_message.addWidget(self.message_label) self.gridLayout.addLayout(horizontalLayout_message, 7, 0, 1, 3) self.recordButton.setCheckable(True)
class Window(QtGui.QMainWindow): def __init__(self, parent=None): print >> sys.stderr, 'Window::init()' QtGui.QMainWindow.__init__(self, None, QtCore.Qt.Tool|QtCore.Qt.FramelessWindowHint) self.setFocusPolicy(QtCore.Qt.StrongFocus) self.setAttribute(QtCore.Qt.WA_QuitOnClose, True) self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) self.setWindowTitle('FYP module 2012') self.select_img_folder() def select_img_folder(self): fd = QtGui.QFileDialog(caption="Select image folder") tree = fd.findChild(QtGui.QTreeView) tree.setRootIsDecorated(True) tree.setItemsExpandable(True) fd.setFileMode(QtGui.QFileDialog.Directory) fd.setViewMode(QtGui.QFileDialog.Detail) if fd.exec_(): self.init_ui(str(fd.selectedFiles()[0])) else: sys.exit(0) def init_ui(self, directory): # UI style QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('macintosh')) # UI position self.move(0, 0) self.resolution = QtGui.QDesktopWidget().availableGeometry() self.setGeometry(self.resolution) self.showFullScreen() # UI components self.splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) # pane1 self.left = QtGui.QFrame(self) self.left.setFrameShape(QtGui.QFrame.StyledPanel) self.scene = QtGui.QGraphicsScene() self.view = GraphicsView(None, self.scene, self.left) self.view.setDragMode(QtGui.QGraphicsView.ScrollHandDrag) self.view.setMinimumSize(.8*self.resolution.width(), self.resolution.height()) self.view.setCacheMode(QtGui.QGraphicsView.CacheBackground) self.view.setViewportUpdateMode(QtGui.QGraphicsView.BoundingRectViewportUpdate) self.splitter.addWidget(self.view) # pane2 self.right = QtGui.QSplitter(QtCore.Qt.Vertical) self.right_top_model = QtGui.QDirModel() self.right_top_model.setNameFilters(['*.png']) self.right_top_model.setFilter(QtCore.QDir.AllDirs|QtCore.QDir.Files| QtCore.QDir.NoDotAndDotDot|QtCore.QDir.CaseSensitive) self.right_top_model.setSorting(QtCore.QDir.Name|QtCore.QDir.DirsFirst) self.right_top_tree = FileTree(self.right_top_model, directory) QtCore.QObject.connect(self.right_top_tree, QtCore.SIGNAL("clicked(QModelIndex)"), self.right_top_clicked) self.right.addWidget(self.right_top_tree) self.right_bottom_tree = FileTree(None, directory) QtCore.QObject.connect(self.right_bottom_tree, QtCore.SIGNAL("clicked(QModelIndex)"), self.right_bottom_clicked) self.right.addWidget(self.right_bottom_tree) self.splitter.addWidget(self.right) self.setCentralWidget(self.splitter) def load_image(self, filename, qwidget): print >> sys.stderr, "Window::load_image(%s)" % filename self.filename = filename self.qwidget = qwidget if filename and os.path.isfile(filename) \ and os.path.splitext(filename)[1].endswith('.png'): [self.scene.removeItem(item) for item in self.scene.items()] self.image = Image.open(str(filename)) width, height = self.image.size self.pixmap = QtGui.QPixmap(filename) self.qgpi = QtGui.QGraphicsPixmapItem(self.pixmap) self.scene.addItem(self.qgpi) self.scene.setSceneRect(self.scene.itemsBoundingRect()) self.view.centerOn(self.view.size().width()/2, self.view.size().height()/2) assert len(self.scene.items()) == 1 self.view.scene = self.scene self.view.pixmap = self.pixmap # print >> sys.stderr, self.left.size(), self.view.size(), self.scene.sceneRect(), self.scene.itemsBoundingRect(), (width, height) def right_top_clicked(self, index): print >> sys.stderr, 'Window::right_top_clicked()' if index and index.isValid() and index.row() >= 0: model = index.model() if model: path = str(model.filePath(index)) if os.path.isfile(path) \ and os.path.splitext(path)[1].endswith('.png'): print >> sys.stderr, 'Window::show_image(%s)' % path self.load_image(path, self.left) self.right_bottom_tree.setModel(None) elif os.path.isdir(path) and model.isDir(index): print >> sys.stderr, 'Window::show_dir(%s)' % path self.model = QtGui.QDirModel() self.model.setNameFilters(['*.png']) self.model.setFilter(QtCore.QDir.Files| QtCore.QDir.NoDotAndDotDot|QtCore.QDir.CaseSensitive) self.model.setSorting(QtCore.QDir.Name) self.right_bottom_tree.setModel(self.model) self.right_bottom_tree.setRootIndex(self.model.index(path)) [self.right_bottom_tree.hideColumn(n) for n in xrange(1,4)] self.right_bottom_tree.header().hide() self.right_bottom_tree.setColumnWidth(0,256) # clear image loaded def right_bottom_clicked(self, index): if index and index.isValid() and index.row() >= 0: model = index.model() if model: path = str(model.filePath(index)) if os.path.isfile(path) \ and os.path.splitext(path)[1].endswith('.png'): print >> sys.stderr, 'Window::right_bottom_clicked(%s)' % path self.load_image(path, self.left) def keyPressEvent(self, event): if isinstance(event, QtGui.QKeyEvent): event.accept() else: event.ignore() if event.key() == QtCore.Qt.Key_Q \ and QtGui.QMessageBox.question(self, 'Question', "Exit application?", QtGui.QMessageBox.Yes|QtGui.QMessageBox.No, QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes: self.close() sys.exit(0) QtGui.QMainWindow.keyPressEvent(self,event) def handleMessage(self, message): print >> sys.stderr, 'Window::handleMessage(%s)' % message def closeEvent(self, event): QtGui.QApplication.instance().quit()
def initUI(self): # TODO - add reset button grid = QGridLayout() grid.setVerticalSpacing(20) grid.setHorizontalSpacing(50) self.drawView = QGraphicsView(self) self.view = GraphicsView(self.drawView, self) self.drawView.setMouseTracking(True) self.view.setMouseTracking(True) self.rd = rdButton(self.view) self.editDict = defaultdict(list) # TODO - add a radiobutton to have a slider turned on and off self.lbl1 = QLabel() self.lbl1.setText("erode") self.lbl1.setAlignment(Qt.AlignCenter) self.sl1 = QSlider(Qt.Horizontal) self.sl1.setObjectName("erode") self.sl1.setMinimum(0) self.sl1.setMaximum(10) self.sl1.setValue(1) self.sl1.setTickPosition(QSlider.TicksBelow) self.sl1.setTickInterval(1) self.lbl2 = QLabel() self.lbl2.setText("open") self.lbl2.setAlignment(Qt.AlignCenter) self.sl2 = QSlider(Qt.Horizontal) self.sl2.setObjectName('open') self.sl2.setMinimum(0) self.sl2.setMaximum(10) self.sl2.setValue(1) self.sl2.setTickPosition(QSlider.TicksBelow) self.sl2.setTickInterval(1) self.lbl3 = QLabel() self.lbl3.setText("blackhat") self.lbl3.setAlignment(Qt.AlignCenter) self.sl3 = QSlider(Qt.Horizontal) self.sl3.setObjectName('blackhat') self.sl3.setMinimum(0) self.sl3.setMaximum(10) self.sl3.setValue(1) self.sl3.setTickPosition(QSlider.TicksBelow) self.sl3.setTickInterval(1) self.lbl4 = QLabel() self.lbl4.setText("tophat") self.lbl4.setAlignment(Qt.AlignCenter) self.sl4 = QSlider(Qt.Horizontal) self.sl4.setObjectName('tophat') self.sl4.setMinimum(0) self.sl4.setMaximum(10) self.sl4.setValue(1) self.sl4.setTickPosition(QSlider.TicksBelow) self.sl4.setTickInterval(1) self.lbl5 = QLabel() self.lbl5.setText("close") self.lbl5.setAlignment(Qt.AlignCenter) self.sl5 = QSlider(Qt.Horizontal) self.sl5.setObjectName('close') self.sl5.setMinimum(0) self.sl5.setMaximum(10) self.sl5.setValue(1) self.sl5.setTickPosition(QSlider.TicksBelow) self.sl5.setTickInterval(1) self.lbl6 = QLabel() self.lbl6.setText("dilate") self.lbl6.setAlignment(Qt.AlignCenter) self.sl6 = QSlider(Qt.Horizontal) self.sl6.setObjectName('dilate') self.sl6.setMinimum(0) self.sl6.setMaximum(10) self.sl6.setValue(1) self.sl6.setTickPosition(QSlider.TicksBelow) self.sl6.setTickInterval(1) grid.addWidget(self.view, 0, 0, -1, 15) grid.addWidget(self.drawView, 0, 14, -1, 15) grid.addWidget(self.rd, 0, 29, 1, 3) grid.addWidget(self.lbl1, 1, 29, 1, 3) grid.addWidget(self.sl1, 2, 29, 1, 3) grid.addWidget(self.lbl6, 3, 29, 1, 3) grid.addWidget(self.sl6, 4, 29, 1, 3) grid.addWidget(self.lbl2, 5, 29, 1, 3) grid.addWidget(self.sl2, 6, 29, 1, 3) grid.addWidget(self.lbl5, 7, 29, 1, 3) grid.addWidget(self.sl5, 8, 29, 1, 3) grid.addWidget(self.lbl3, 9, 29, 1, 3) grid.addWidget(self.sl3, 10, 29, 1, 3) grid.addWidget(self.lbl4, 11, 29, 1, 3) grid.addWidget(self.sl4, 12, 29, 1, 3) self.setLayout(grid) self.sl1.valueChanged.connect(self.valuechange) self.sl2.valueChanged.connect(self.valuechange) self.sl3.valueChanged.connect(self.valuechange) self.sl4.valueChanged.connect(self.valuechange) self.sl5.valueChanged.connect(self.valuechange) self.sl6.valueChanged.connect(self.valuechange)
class myApp2(QWidget, photoManager): def __init__(self, parent=None): super(myApp2, self).__init__(parent) self.setWindowTitle("selecting") self.initUI() def initUI(self): # TODO - add reset button grid = QGridLayout() grid.setVerticalSpacing(20) grid.setHorizontalSpacing(50) self.drawView = QGraphicsView(self) self.view = GraphicsView(self.drawView, self) self.drawView.setMouseTracking(True) self.view.setMouseTracking(True) self.rd = rdButton(self.view) self.editDict = defaultdict(list) # TODO - add a radiobutton to have a slider turned on and off self.lbl1 = QLabel() self.lbl1.setText("erode") self.lbl1.setAlignment(Qt.AlignCenter) self.sl1 = QSlider(Qt.Horizontal) self.sl1.setObjectName("erode") self.sl1.setMinimum(0) self.sl1.setMaximum(10) self.sl1.setValue(1) self.sl1.setTickPosition(QSlider.TicksBelow) self.sl1.setTickInterval(1) self.lbl2 = QLabel() self.lbl2.setText("open") self.lbl2.setAlignment(Qt.AlignCenter) self.sl2 = QSlider(Qt.Horizontal) self.sl2.setObjectName('open') self.sl2.setMinimum(0) self.sl2.setMaximum(10) self.sl2.setValue(1) self.sl2.setTickPosition(QSlider.TicksBelow) self.sl2.setTickInterval(1) self.lbl3 = QLabel() self.lbl3.setText("blackhat") self.lbl3.setAlignment(Qt.AlignCenter) self.sl3 = QSlider(Qt.Horizontal) self.sl3.setObjectName('blackhat') self.sl3.setMinimum(0) self.sl3.setMaximum(10) self.sl3.setValue(1) self.sl3.setTickPosition(QSlider.TicksBelow) self.sl3.setTickInterval(1) self.lbl4 = QLabel() self.lbl4.setText("tophat") self.lbl4.setAlignment(Qt.AlignCenter) self.sl4 = QSlider(Qt.Horizontal) self.sl4.setObjectName('tophat') self.sl4.setMinimum(0) self.sl4.setMaximum(10) self.sl4.setValue(1) self.sl4.setTickPosition(QSlider.TicksBelow) self.sl4.setTickInterval(1) self.lbl5 = QLabel() self.lbl5.setText("close") self.lbl5.setAlignment(Qt.AlignCenter) self.sl5 = QSlider(Qt.Horizontal) self.sl5.setObjectName('close') self.sl5.setMinimum(0) self.sl5.setMaximum(10) self.sl5.setValue(1) self.sl5.setTickPosition(QSlider.TicksBelow) self.sl5.setTickInterval(1) self.lbl6 = QLabel() self.lbl6.setText("dilate") self.lbl6.setAlignment(Qt.AlignCenter) self.sl6 = QSlider(Qt.Horizontal) self.sl6.setObjectName('dilate') self.sl6.setMinimum(0) self.sl6.setMaximum(10) self.sl6.setValue(1) self.sl6.setTickPosition(QSlider.TicksBelow) self.sl6.setTickInterval(1) grid.addWidget(self.view, 0, 0, -1, 15) grid.addWidget(self.drawView, 0, 14, -1, 15) grid.addWidget(self.rd, 0, 29, 1, 3) grid.addWidget(self.lbl1, 1, 29, 1, 3) grid.addWidget(self.sl1, 2, 29, 1, 3) grid.addWidget(self.lbl6, 3, 29, 1, 3) grid.addWidget(self.sl6, 4, 29, 1, 3) grid.addWidget(self.lbl2, 5, 29, 1, 3) grid.addWidget(self.sl2, 6, 29, 1, 3) grid.addWidget(self.lbl5, 7, 29, 1, 3) grid.addWidget(self.sl5, 8, 29, 1, 3) grid.addWidget(self.lbl3, 9, 29, 1, 3) grid.addWidget(self.sl3, 10, 29, 1, 3) grid.addWidget(self.lbl4, 11, 29, 1, 3) grid.addWidget(self.sl4, 12, 29, 1, 3) self.setLayout(grid) self.sl1.valueChanged.connect(self.valuechange) self.sl2.valueChanged.connect(self.valuechange) self.sl3.valueChanged.connect(self.valuechange) self.sl4.valueChanged.connect(self.valuechange) self.sl5.valueChanged.connect(self.valuechange) self.sl6.valueChanged.connect(self.valuechange) def connectRB(self): return (self.rd._button_group.checkedId()) def setImage(self): self.view.setImage() def valuechange(self): sender = self.sender() if sender.objectName() in self.editDict: pass else: self.editDict[sender.objectName()] = [] self.imageEdit = self.editIm(self.view.cvogImageBW, self.editDict, sender.objectName(), sender.value()) self.imageEdit = QImage(self.imageEdit, self.imageEdit.shape[1], self.imageEdit.shape[0], QImage.Format_Grayscale8) self.pixmap = QPixmap(self.imageEdit) width = self.view.imageScaled.width() height = self.view.imageScaled.height() self.pixmap = self.pixmap.scaled(width, height, Qt.KeepAspectRatio) self.view.scene().clear() self.pixmapItem = QGraphicsPixmapItem() self.view.scene().addItem(self.pixmapItem) self.pixmapItem.setPixmap(self.pixmap) def updatePixmap(self, pixmap): self.view.pixmapItem.setPixmap(pixmap)
class Mainwindow(QMainWindow, UI_mainwindow.Ui_WaterRescue): def __init__(self, parent=None): super(Mainwindow, self).__init__(parent) self.setupUi(self) self.graphicsView = GraphicsView() self.verticalLayout_5.addWidget(self.graphicsView) self.graphicsView.setGeometry(0, 0, 874, 600) self.viewwidth = self.graphicsView.width() self.viewheight = self.graphicsView.height() self.scene = QGraphicsScene() self.scene.setSceneRect(-self.viewwidth * 100, -self.viewheight * 100, self.viewwidth * 200, self.viewheight * 200) # 这样就不会被大小限制住,这样scene可以随着view的变化而变化。 self.graphicsView.setScene(self.scene) self.deleteitemsx = [] self.deleteitemsy = [] self.circleitem = [] self.axisitemx = [] self.axisitemy = [] self.textitemx = [] self.textitemy = [] self.sc = 1 self.lastsc = 1 self.sumscale = 1 self.jishu = 1 self.start = 0 self.fenmiao = 1 self.NS = 'N' self.WE = 'E' self.addorigin = False self.xiugaihouzuobiao = None self.origin = None self.listpositionexample = None self.addpositionexample = None self.updateUi() self.connect(self.filedefault, SIGNAL('triggered()'), self.configure) def xfloat(self, DWL, CWL, SeaSp, SeaA, TrendSp, TrenA, WcS, WcA, WindA): return DWL * sin(WindA) + CWL * cos(WindA) + SeaSp * sin( SeaA) + TrendSp * sin(TrenA) + WcS * sin(WcA) def yfloat(self, DWL, CWL, SeaSp, SeaA, TrendSp, TrenA, WcS, WcA, WindA): return DWL * cos(WindA) - CWL * sin(WindA) + SeaSp * cos( SeaA) + TrendSp * cos(TrenA) + WcS * cos(WcA) def Transfor(self, alljw): for jw in alljw: jw[0] = jw[0] * 20037508.34 / 180 jw[1] = math.log(math.tan((90 + jw[1]) * PI / 360)) / (PI / 180) jw[1] = jw[1] * 20037508.34 / 180 return alljw def Transback(self, alljw): for jw in alljw: jw[0] = jw[0] / 20037508.34 * 180 jw[1] = jw[1] / 20037508.34 * 180 jw[1] = 180 / PI * (2 * math.atan(math.exp(jw[1] * PI / 180)) - PI / 2) return alljw def Float(self, alljw): conf = ConfigObj('Config') MenDWL = float(conf['MenDWL']) / 100 MenCWL = float(conf['MenCWL']) / 100 MenDWLerror = float(conf['MenDWLerror']) / 100 MenCWLerror = float(conf['MenCWLerror']) / 100 LifeBoatDWL = float(conf['LifeBoatDWL']) / 100 LifeBoatCWL = float(conf['LifeBoatCWL']) / 100 LifeBoatDWLerror = float(conf['LifeBoatDWLerror']) / 100 LifeBoatCWLerror = float(conf['LifeBoatCWLerror']) / 100 ShipDWL = float(conf['ShipDWL']) / 100 ShipCWL = float(conf['ShipCWL']) / 100 ShipDWLerror = float(conf['ShipDWLerror']) / 100 ShipCWLerror = float(conf['ShipCWLerror']) / 100 WindSpeed = self.WindSpeeddoubleSpinBox.value() / 3.6 WindAngle = self.WindAngledoubleSpinBox.value() * PI / 180 SeaSpeed = self.SeaSpeeddoubleSpinBox.value() / 3.6 SeaAngle = self.SeaAngledoubleSpinBox.value() * PI / 180 TrendSpeed = self.TrendSpeeddoubleSpinBox.value() / 3.6 TrendAngle = self.TrendAngledoubleSpinBox.value() * PI / 180 Time = self.TimespinBox_1.value() * 3600 + self.TimespinBox_2.value( ) * 60 + self.TimespinBox_3.value() MenDWLSpeed = MenDWL * WindSpeed + MenDWLerror MenCWLSpeed = MenCWL * WindSpeed + MenCWLerror LifeDWLSpeed = LifeBoatDWL * WindSpeed + LifeBoatDWLerror LifeCWLSpeed = LifeBoatCWL * WindSpeed + LifeBoatCWLerror ShipDWLSpeed = ShipDWL * WindSpeed + ShipDWLerror ShipCWLSpeed = ShipCWL * WindSpeed + ShipCWLerror if WindSpeed < 9.25: Wc_Speed = 0.09 else: Wc_Speed = (0.230446 + 0.0070957 * WindSpeed * 0.514)**2 + 0.09 Wc_Angle = (-35.338 + 3587.98 / (0.514 * WindSpeed) + WindAngle) * PI / 180 Menxfloat = self.xfloat(MenDWLSpeed, MenCWLSpeed, SeaSpeed, SeaAngle, TrendSpeed, TrendAngle, Wc_Speed, Wc_Angle, WindAngle) * Time Menyfloat = self.yfloat(MenDWLSpeed, MenCWLSpeed, SeaSpeed, SeaAngle, TrendSpeed, TrendAngle, Wc_Speed, Wc_Angle, WindAngle) * Time Lifexfloat = self.xfloat(LifeDWLSpeed, LifeCWLSpeed, SeaSpeed, SeaAngle, TrendSpeed, TrendAngle, Wc_Speed, Wc_Angle, WindAngle) * Time Lifeyfloat = self.yfloat(LifeDWLSpeed, LifeCWLSpeed, SeaSpeed, SeaAngle, TrendSpeed, TrendAngle, Wc_Speed, Wc_Angle, WindAngle) * Time Shipxfloat = self.xfloat(ShipDWLSpeed, ShipCWLSpeed, SeaSpeed, SeaAngle, TrendSpeed, TrendAngle, Wc_Speed, Wc_Angle, WindAngle) * Time Shipyfloat = self.yfloat(ShipDWLSpeed, ShipCWLSpeed, SeaSpeed, SeaAngle, TrendSpeed, TrendAngle, Wc_Speed, Wc_Angle, WindAngle) * Time for jw in alljw: jw[0] = jw[0] + Menxfloat jw[1] = jw[1] + Menyfloat return alljw def p(self, s=None): if not s: return self.__dirty = True self.start = 0 self.addorigin = True if self.circleitem: self.graphicsView.scale(1 / self.sumscale, 1 / self.sumscale) for i in self.circleitem: if i.pos().x()>= -self.viewwidth * 100 and i.pos().x() <= self.viewwidth * 100\ and i.pos().y()>= -self.viewheight * 100 and i.pos().y() <= self.viewheight * 100: self.scene.removeItem(i) self.circleitem = [] self.graphicsView.centerOn(QPoint(0, 0)) self.sumscale = 1 weidu, jingdu = s.split('-') self.originj = jingdu.split(',') self.originw = weidu.split(',') self.NS = weidu[-1] self.WE = jingdu[-1] self.xiugaihouzuobiao = self.initialize() linshi = self.pointpos([self.originw, self.originj]) self.updateUi() self.axis() def initialize(self): self.__dirty = True choice = [] for i in range(61): choice.append(int(i)) a = self.originw b = self.originj c = [] if self.NS == 'N': for i in choice: if i >= float(a[2][:-1]): break elif self.NS == 'S': for i in choice: if i >= float(a[2][:-1]): if i != 0: i -= 10 break if i != 60: c.append([a[0], a[1], i]) else: if int(a[1]) + 1 == 60: c.append([int(a[0]) + 1, 0, 0]) else: c.append([a[0], int(a[1]) + 1, 0]) if self.WE == 'E': for i in choice: if i >= float(b[2][:-1]): break elif self.WE == 'W': for i in choice: if i >= float(b[2][:-1]): if i != 0: i -= 10 break if i != 60: c.append([b[0], b[1], i]) else: if int(a[1]) + 1 == 60: c.append([int(b[0]) + 1, 0, 0]) else: c.append([b[0], int(b[1]) + 1, 0]) return c def convert1(self, index, NSWE=None): self.__dirty = True if self.NS == 'N' or NSWE == 'N': index = -index / 100 else: index = index / 100 if index >= 0: a = self.xiugaihouzuobiao[0][2] + index % 60 b = int(self.xiugaihouzuobiao[0][1]) + int(index / 60) % 60 c = int(self.xiugaihouzuobiao[0][0]) + int(index / 60 / 60) else: a = self.xiugaihouzuobiao[0][2] - abs(index) % 60 b = int(self.xiugaihouzuobiao[0][1]) - int(abs(index) / 60) % 60 c = int(self.xiugaihouzuobiao[0][0]) - int(abs(index) / 60 / 60) if a >= 60: a -= 60 b += 1 elif a < 0: a += 60 b -= 1 if b >= 60: b -= 60 c += 1 elif b < 0: b += 60 c -= 1 if c == b == a == 0: return "0°0'0''" if c >= 0 and self.NS == 'N': return "%s°%s'%.5s''N" % (c, b, a) elif c < 0 and self.NS == 'N': if a == 0: a = 0 if b == 0: b = 0 c = -c else: b = 60 - b c = -c - 1 else: a = 60 - a b = 60 - b - 1 c = -c - 1 return "%s°%s'%.5s''S" % (c, b, a) if c >= 0 and self.NS == 'S': return "%s°%s'%.5s''S" % (c, b, a) elif c < 0 and self.NS == 'S': if a == 0: a = 0 if b == 0: b = 0 c = -c else: b = 60 - b c = -c - 1 else: a = 60 - a b = 60 - b - 1 c = -c - 1 return "%s°%s'%.5s''N" % (c, b, a) def convert2(self, index, NSWE=None): self.__dirty = True if self.NS == 'N' or NSWE == 'N': index = -index / 100 c = index / 60 / 60+int(self.xiugaihouzuobiao[0][0])\ +int(self.xiugaihouzuobiao[0][1])/60+self.xiugaihouzuobiao[0][2]/3600 if c == 0: return "0°" elif c > 0: return "%.7s°N" % (c) elif c < 0: return "%.7s°S" % (-c) else: index = index / 100 c = index / 60 / 60+int(self.xiugaihouzuobiao[0][0])\ +int(self.xiugaihouzuobiao[0][1])/60+self.xiugaihouzuobiao[0][2]/3600 if c == 0: return "0°" elif c > 0: return "%.7s°S" % (c) elif c < 0: return "%.7s°N" % (-c) def convert3(self, index, NSWE=None): self.__dirty = True if self.WE == 'E' or NSWE == 'E': index = -index / 100 else: index = index / 100 if index >= 0: a = self.xiugaihouzuobiao[1][2] - index % 60 b = int(self.xiugaihouzuobiao[1][1]) - int(index / 60) % 60 c = int(self.xiugaihouzuobiao[1][0]) - int(index / 60 / 60) else: a = self.xiugaihouzuobiao[1][2] + abs(index) % 60 b = int(self.xiugaihouzuobiao[1][1]) + int(abs(index) / 60) % 60 c = int(self.xiugaihouzuobiao[1][0]) + int(abs(index) / 60 / 60) if a >= 60: a -= 60 b += 1 elif a < 0: a += 60 b -= 1 if b >= 60: b -= 60 c += 1 elif b < 0: b += 60 c -= 1 if c == b == a == 0: return "0°0'0''" if c >= 0 and self.WE == 'E': if c < 180: return "%s°%s'%.5s''E" % (c, b, a) elif c == 180: if b == a == 0: return "180°0'0''" elif a == 0: return "%s°%s'%.5s''W" % (179, 60 - b, 0) else: return "%s°%s'%.5s''W" % (179, 59 - b, 60 - a) elif c > 180: if a == 0: a = 0 if b == 0: c = 360 - c else: b = 60 - b c = 359 - c else: a = 60 - a b = 59 - b c = 359 - c return "%s°%s'%.5s''W" % (c, b, a) elif c < 0 and self.WE == 'E': if a == 0: a = 0 if b == 0: b = 0 c = -c else: b = 60 - b c = -c - 1 else: a = 60 - a b = 60 - b - 1 c = -c - 1 if c < 180: return "%s°%s'%.5s''W" % (c, b, a) if c == 180 and b == a == 0: return "180°0'0''" if c > 180: if a == 0: a = 0 if b == 0: c = 360 - c else: b = 60 - b c = 359 - c else: a = 60 - a b = 59 - b c = 359 - c return "%s°%s'%.5s''E" % (c, b, a) if c >= 0 and self.WE == 'W': if c < 180: return "%s°%s'%.5s''W" % (c, b, a) elif c == 180: if b == a == 0: return "180°0'0''" elif a == 0: return "%s°%s'%.5s''E" % (179, 60 - b, 0) else: return "%s°%s'%.5s''E" % (179, 59 - b, 60 - a) elif c > 180: if a == 0: a = 0 if b == 0: c = 360 - c else: b = 60 - b c = 359 - c else: a = 60 - a b = 59 - b c = 359 - c return "%s°%s'%.5s''E" % (c, b, a) elif c < 0 and self.WE == 'W': if a == 0: a = 0 if b == 0: b = 0 c = -c else: b = 60 - b c = -c - 1 else: a = 60 - a b = 60 - b - 1 c = -c - 1 if c < 180: return "%s°%s'%.5s''E" % (c, b, a) if c == 180 and b == a == 0: return "180°0'0''" if c > 180: if a == 0: a = 0 if b == 0: c = 360 - c else: b = 60 - b c = 359 - c else: a = 60 - a b = 59 - b c = 359 - c return "%s°%s'%.5s''W" % (c, b, a) def convert4(self, index, NSWE=None): self.__dirty = True if self.WE == 'E' or NSWE == 'E': index = -index / 100 c = index / 60 / 60+int(self.xiugaihouzuobiao[0][0])\ +int(self.xiugaihouzuobiao[0][1])/60+self.xiugaihouzuobiao[0][2]/3600 if c == 0: return "0°" elif c > 0: return "%.7s°W" % (c) elif c == 180: return "180°" elif c > 180: return "%.7s°E" % (360 - c) elif c < 0: return "%.7s°E" % (-c) else: index = index / 100 c = index / 60 / 60+int(self.xiugaihouzuobiao[0][0])\ +int(self.xiugaihouzuobiao[0][1])/60+self.xiugaihouzuobiao[0][2]/3600 if c == 0: return "0°" elif c > 0 and c < 180: return "%.7s°E" % (c) elif c == 180: return "180°" elif c > 180: return "%.7s°W" % (360 - c) elif c < 0: return "%.7s°W" % (-c) def axis(self): self.__dirty = True pos1 = self.graphicsView.mapToScene(0, 0) pos2 = self.graphicsView.mapToScene(self.graphicsView.width(), self.graphicsView.height()) for i in self.textitemx: self.scene.removeItem(i) self.textitemx = [] for i in self.textitemy: self.scene.removeItem(i) self.textitemy = [] pos3 = [(-pos1.x() + pos2.x()) / 15 + pos1.x(), (pos1.y() - pos2.y()) / 10 + pos2.y()] for i in self.axisitemx: if i.index >= -self.viewwidth * 100 and i.index <= self.viewwidth * 100: h = QGraphicsTextItem() h.setPlainText('%s' % str(self.convert3(i.index)) if self.fenmiao==1\ else '%s'%str(self.convert4(i.index))) self.textitemx.append(h) h.setPos(i.index, pos3[1]) self.scene.addItem(h) h.setScale(1 / self.sumscale) for i in self.axisitemy: if i.index >= -self.viewheight * 100 and i.index <= self.viewheight * 100: h = QGraphicsTextItem() h.setPlainText('%s' % str(self.convert1(i.index)) if self.fenmiao==1\ else '%s' %str(self.convert2(i.index))) self.textitemy.append(h) h.setPos(pos3[0], i.index) h.rotate(90) self.scene.addItem(h) h.setScale(1 / self.sumscale) def pointzuobiao(self, pos): self.__dirty = True pointx = self.convert1(pos.y()) pointy = self.convert3(pos.x()) return('%s,%s'%(pointx, pointy))\ def pointzuobiao1(self, pos): self.__dirty = True pointx = self.convert2(pos.y()) pointy = self.convert4(pos.x()) return ('%s,%s' % (pointx, pointy)) def pointpos1(self, zuobiao=None): #坐标形式为["0°0'0''N", "0°0'0''E"] a = zuobiao[0].split('°') du = a[0] b = a[1].split("'") fen = b[0] miao = b[1] + b[3] a = zuobiao[1].split('°') du1 = a[0] b = a[1].split("'") fen1 = b[0] miao1 = b[1] + b[3] return ([[du, fen, miao], [du1, fen1, miao1]]) def pointpos(self, zuobiao=None): #坐标形式为([[0,0,000N],[0,0,00E]]) self.__dirty = True if zuobiao and self.xiugaihouzuobiao: a=int(self.xiugaihouzuobiao[0][0])*3600 \ + int(self.xiugaihouzuobiao[0][1]) * 60 + self.xiugaihouzuobiao[0][2] if zuobiao[0][2][-1] == 'N' or zuobiao[0][2][-1] == 'S': b=int(zuobiao[0][0])*3600 \ + int(zuobiao[0][1]) * 60 + float(zuobiao[0][2][:-1]) else: b = int(zuobiao[0][0]) * 3600 \ + int(zuobiao[0][1]) * 60 + float(zuobiao[0][2]) c=int(self.xiugaihouzuobiao[1][0]) *3600\ + int(self.xiugaihouzuobiao[1][1]) * 60 + self.xiugaihouzuobiao[1][2] if zuobiao[1][2][-1] == "E" or zuobiao[1][2][-1] == 'W': d=int(zuobiao[1][0])*3600 \ + int(zuobiao[1][1]) * 60 + float(zuobiao[1][2][:-1]) else: d = int(zuobiao[1][0]) * 3600 \ + int(zuobiao[1][1]) * 60 + float(zuobiao[1][2]) if a == 0: if zuobiao[0][2][-1] == 'N': e = a - b elif zuobiao[0][2][-1] == 'S': e = b - a else: e = 0 elif a != 0: if self.NS == 'N': if zuobiao[0][2][-1] == 'N': e = a - b elif zuobiao[0][2][-1] == 'S': e = a + b else: e = a elif self.NS == 'S': if zuobiao[0][2][-1] == 'N': e = -a - b elif zuobiao[0][2][-1] == 'S': e = b - a else: e = -a if b == 0: if zuobiao[1][2][-1] == 'W': f = c - d elif zuobiao[1][2][-1] == 'E': f = d - c else: f = 0 elif b != 0: if self.WE == 'E': if zuobiao[1][2][-1] == 'E': f = d - c elif zuobiao[1][2][-1] == 'W': f = -d - c else: f = -c elif self.WE == 'W': if zuobiao[1][2][-1] == 'W': f = c - d elif zuobiao[1][2][-1] == 'E': f = d + c else: f = c return QPoint(100 * f, 100 * e) def updateUi(self, Pos=None): self.__dirty = True if self.sumscale == 1 and self.start == 0: for i in self.axisitemx: if i.index >= -self.viewwidth * 100 and i.index <= self.viewwidth * 100: self.scene.removeItem(i) del i self.axisitemx = [] for i in self.axisitemy: if i.index >= -self.viewheight * 100 and i.index <= self.viewheight * 100: self.scene.removeItem(i) del i self.axisitemy = [] n = 1 jishu = -15 * 200 while n <= 31: linshi = GraphicsLineItem(jishu, -self.viewheight * 100, jishu, self.viewheight * 100) linshi.setindex(jishu) linshi.setPen(QPen(QColor(10, 100, 240))) self.axisitemx.append(linshi) self.scene.addItem(linshi) n += 1 jishu += 200 jishu = -15 * 200 n = 1 while n <= 31: linshi = GraphicsLineItem(-self.viewwidth * 100, jishu, self.viewwidth * 100, jishu) linshi.setindex(jishu) linshi.setPen(QPen(QColor(10, 100, 240))) self.axisitemy.append(linshi) self.scene.addItem(linshi) jishu += 200 n += 1 elif self.lastsc >= 2: for i in self.axisitemx: if i.index >= -self.viewwidth * 100 and i.index <= self.viewwidth * 100: self.scene.removeItem(i) for i in range(len(self.axisitemx)): self.deleteitemsx.append(i) self.deleteitemsx.reverse() self.deleteitemsx.pop() span = (self.axisitemx[1].index - self.axisitemx[0].index) / 2 for i in self.deleteitemsx: linshi = GraphicsLineItem(self.axisitemx[i].index - span, -self.viewheight * 100, self.axisitemx[i].index - span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[i].index - span) self.axisitemx.insert(i, linshi) n = len(self.axisitemx) for i in range(int(n / 4)): self.axisitemx.pop(len(self.axisitemx) - 1) self.axisitemx.pop(0) self.deleteitemsx = [] for i in self.axisitemx: if i.index >= -self.viewwidth * 100 and i.index <= self.viewwidth * 100: self.scene.addItem(i) for i in self.axisitemy: if i.index >= -self.viewheight * 100 and i.index <= self.viewheight * 100: self.scene.removeItem(i) for i in range(len(self.axisitemy)): self.deleteitemsy.append(i) self.deleteitemsy.reverse() self.deleteitemsy.pop() span = (self.axisitemy[1].index - self.axisitemy[0].index) / 2 for i in self.deleteitemsy: linshi = GraphicsLineItem(-self.viewwidth * 100, self.axisitemy[i].index - span, self.viewwidth * 100, self.axisitemy[i].index - span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[i].index - span) self.axisitemy.insert(i, linshi) n = len(self.axisitemy) for i in range(int(n / 4)): self.axisitemy.pop(len(self.axisitemy) - 1) self.axisitemy.pop(0) self.deleteitemsy = [] for i in self.axisitemy: if i.index >= -self.viewheight * 100 and i.index <= self.viewheight * 100: self.scene.addItem(i) for i in range(len(self.axisitemx)): if self.axisitemx[i].index > Pos.x(): break n = int(i - (len(self.axisitemx) - 1) / 2) span = self.axisitemx[1].index - self.axisitemx[0].index if n > 0: for i in range(n): linshi = GraphicsLineItem( self.axisitemx[len(self.axisitemx) - 1].index + span, -self.viewheight * 100, self.axisitemx[len(self.axisitemx) - 1].index + span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[len(self.axisitemx) - 1].index + span) if self.axisitemx[0].index >= -self.viewwidth * 100 \ and self.axisitemx[0].index <= self.viewwidth * 100: self.scene.removeItem(self.axisitemx[0]) if linshi.index <= self.viewwidth * 100 and linshi.index >= -100 * self.viewwidth: self.scene.addItem(linshi) self.axisitemx.append(linshi) self.axisitemx.pop(0) elif n < 0: for i in range(-n): linshi = GraphicsLineItem(self.axisitemx[0].index - span, -self.viewheight * 100, self.axisitemx[0].index - span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[0].index - span) if self.axisitemx[len(self.axisitemx) - 1].index >= -self.viewwidth * 100 \ and self.axisitemx[len(self.axisitemx) - 1].index <= self.viewwidth * 100: self.scene.removeItem( self.axisitemx[len(self.axisitemx) - 1]) if linshi.index <= self.viewwidth * 100 and linshi.index >= -self.viewwidth * 100: self.scene.addItem(linshi) self.axisitemx.insert(0, linshi) self.axisitemx.pop() for i in range(len(self.axisitemy)): if self.axisitemy[i].index > Pos.y(): break n = int(i - (len(self.axisitemx) - 1) / 2) span = self.axisitemy[1].index - self.axisitemy[0].index if n > 0: for i in range(n): linshi = GraphicsLineItem( -self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span, self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[len(self.axisitemy) - 1].index + span) if self.axisitemy[ 0].index <= self.viewheight * 100 and self.axisitemy[ 0].index >= -self.viewheight * 100: self.scene.removeItem(self.axisitemy[0]) if linshi.index <= self.viewheight * 100 and linshi.index >= -self.viewheight * 100: self.scene.addItem(linshi) self.axisitemy.append(linshi) self.axisitemy.pop(0) elif n < 0: for i in range(-n): linshi = GraphicsLineItem(-self.viewwidth * 100, self.axisitemy[0].index - span, self.viewwidth * 100, self.axisitemy[0].index - span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[0].index - span) if self.axisitemy[len(self.axisitemy) - 1].index >= -self.viewheight * 100 \ and self.axisitemy[len(self.axisitemy) - 1].index <= self.viewheight * 100: self.scene.removeItem( self.axisitemy[len(self.axisitemy) - 1]) if linshi.index <= self.viewheight * 100 and linshi.index >= -self.viewheight * 100: self.scene.addItem(linshi) self.axisitemy.insert(0, linshi) self.axisitemy.pop() elif self.lastsc <= 0.5: span = self.axisitemx[1].index - self.axisitemx[0].index n = len(self.axisitemx) for i in range(int(n / 2)): linshi = GraphicsLineItem(self.axisitemx[0].index - span, -self.viewheight * 100, self.axisitemx[0].index - span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[0].index - span) self.axisitemx.insert(0, linshi) if linshi.index >= -self.viewwidth * 100 and linshi.index <= self.viewwidth * 100: self.scene.addItem(linshi) linshi = GraphicsLineItem( self.axisitemx[len(self.axisitemx) - 1].index + span, -self.viewheight * 100, self.axisitemx[len(self.axisitemx) - 1].index + span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[len(self.axisitemx) - 1].index + span) self.axisitemx.append(linshi) if linshi.index >= -self.viewwidth * 100 and linshi.index <= self.viewwidth * 100: self.scene.addItem(linshi) for i in range(len(self.axisitemx)): if i % 2 != 0: self.deleteitemsx.append(i) self.deleteitemsx.reverse() for i in self.deleteitemsx: if self.axisitemx[ i].index >= -self.viewwidth * 100 and self.axisitemx[ i].index <= self.viewwidth * 100: self.scene.removeItem(self.axisitemx[i]) self.axisitemx.pop(i) self.deleteitemsx = [] span = self.axisitemy[1].index - self.axisitemy[0].index n = len(self.axisitemy) for i in range(int(n / 2)): linshi = GraphicsLineItem(-self.viewwidth * 100, self.axisitemy[0].index - span, self.viewwidth * 100, self.axisitemy[0].index - span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[0].index - span) self.axisitemy.insert(0, linshi) if linshi.index >= -self.viewheight * 100 and linshi.index <= self.viewheight * 100: self.scene.addItem(linshi) linshi = GraphicsLineItem( -self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span, self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[len(self.axisitemy) - 1].index + span) self.axisitemy.append(linshi) if linshi.index >= -self.viewheight * 100 and linshi.index <= self.viewheight * 100: self.scene.addItem(linshi) for i in range(len(self.axisitemy)): if i % 2 != 0: self.deleteitemsy.append(i) self.deleteitemsy.reverse() for i in self.deleteitemsy: if self.axisitemy[ i].index <= self.viewheight * 100 and self.axisitemy[ i].index >= -self.viewheight * 100: self.scene.removeItem(self.axisitemy[i]) self.axisitemy.pop(i) self.deleteitemsy = [] for i in range(len(self.axisitemx)): if self.axisitemx[i].index > Pos.x(): break n = int(i - (len(self.axisitemx) - 1) / 2) span = self.axisitemx[1].index - self.axisitemx[0].index if n > 0: for i in range(n): linshi = GraphicsLineItem( self.axisitemx[len(self.axisitemx) - 1].index + span, -self.viewheight * 100, self.axisitemx[len(self.axisitemx) - 1].index + span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[len(self.axisitemx) - 1].index + span) if self.axisitemx[ 0].index >= -self.viewwidth * 100 and self.axisitemx[ 0].index <= self.viewwidth * 100: self.scene.removeItem(self.axisitemx[0]) if linshi.index <= self.viewwidth * 100 and linshi.index >= -100 * self.viewwidth: self.scene.addItem(linshi) self.axisitemx.append(linshi) self.axisitemx.pop(0) elif n < 0: for i in range(-n): linshi = GraphicsLineItem(self.axisitemx[0].index - span, -self.viewheight * 100, self.axisitemx[0].index - span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[0].index - span) if self.axisitemx[len(self.axisitemx) - 1].index >= -self.viewwidth * 100 \ and self.axisitemx[len(self.axisitemx) - 1].index <= self.viewwidth * 100: self.scene.removeItem( self.axisitemx[len(self.axisitemx) - 1]) if linshi.index <= self.viewwidth * 100 and linshi.index >= -self.viewwidth * 100: self.scene.addItem(linshi) self.axisitemx.insert(0, linshi) self.axisitemx.pop() for i in range(len(self.axisitemy)): if self.axisitemy[i].index > Pos.y(): break n = int(i - (len(self.axisitemx) - 1) / 2) span = self.axisitemy[1].index - self.axisitemy[0].index if n > 0: for i in range(n): linshi = GraphicsLineItem( -self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span, self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[len(self.axisitemy) - 1].index + span) if self.axisitemy[ 0].index <= self.viewheight * 100 and self.axisitemy[ 0].index >= -self.viewheight * 100: self.scene.removeItem(self.axisitemy[0]) if linshi.index <= self.viewheight * 100 and linshi.index >= -self.viewheight * 100: self.scene.addItem(linshi) self.axisitemy.append(linshi) self.axisitemy.pop(0) elif n < 0: for i in range(-n): linshi = GraphicsLineItem(-self.viewwidth * 100, self.axisitemy[0].index - span, self.viewwidth * 100, self.axisitemy[0].index - span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[0].index - span) if self.axisitemy[len(self.axisitemy) - 1].index >= -self.viewheight * 100 \ and self.axisitemy[len(self.axisitemy) - 1].index <= self.viewheight * 100: self.scene.removeItem( self.axisitemy[len(self.axisitemy) - 1]) if linshi.index <= self.viewheight * 100 and linshi.index >= -self.viewheight * 100: self.scene.addItem(linshi) self.axisitemy.insert(0, linshi) self.axisitemy.pop() elif self.start == 2: for i in range(len(self.axisitemx)): if self.axisitemx[i].index > Pos.x(): break n = int(i - (len(self.axisitemx) - 1) / 2) span = self.axisitemx[1].index - self.axisitemx[0].index if n > 0: for i in range(n): linshi = GraphicsLineItem( self.axisitemx[len(self.axisitemx) - 1].index + span, -self.viewheight * 100, self.axisitemx[len(self.axisitemx) - 1].index + span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[len(self.axisitemx) - 1].index + span) if self.axisitemx[ 0].index >= -self.viewwidth * 100 and self.axisitemx[ 0].index <= self.viewwidth * 100: self.scene.removeItem(self.axisitemx[0]) if linshi.index <= self.viewwidth * 100 and linshi.index >= -100 * self.viewwidth: self.scene.addItem(linshi) self.axisitemx.append(linshi) self.axisitemx.pop(0) elif n < 0: for i in range(-n): linshi = GraphicsLineItem(self.axisitemx[0].index - span, -self.viewheight * 100, self.axisitemx[0].index - span, self.viewheight * 100) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemx[0].index - span) if self.axisitemx[len(self.axisitemx) - 1].index >= -self.viewwidth * 100 \ and self.axisitemx[len(self.axisitemx) - 1].index <= self.viewwidth * 100: self.scene.removeItem( self.axisitemx[len(self.axisitemx) - 1]) if linshi.index <= self.viewwidth * 100 and linshi.index >= -self.viewwidth * 100: self.scene.addItem(linshi) self.axisitemx.insert(0, linshi) self.axisitemx.pop() for i in range(len(self.axisitemy)): if self.axisitemy[i].index > Pos.y(): break n = int(i - (len(self.axisitemx) - 1) / 2) span = self.axisitemy[1].index - self.axisitemy[0].index if n > 0: for i in range(n): linshi = GraphicsLineItem( -self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span, self.viewwidth * 100, self.axisitemy[len(self.axisitemy) - 1].index + span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[len(self.axisitemy) - 1].index + span) if self.axisitemy[ 0].index <= self.viewheight * 100 and self.axisitemy[ 0].index >= -self.viewheight * 100: self.scene.removeItem(self.axisitemy[0]) if linshi.index <= self.viewheight * 100 and linshi.index >= -self.viewheight * 100: self.scene.addItem(linshi) self.axisitemy.append(linshi) self.axisitemy.pop(0) elif n < 0: for i in range(-n): linshi = GraphicsLineItem(-self.viewwidth * 100, self.axisitemy[0].index - span, self.viewwidth * 100, self.axisitemy[0].index - span) linshi.setPen(QPen(QColor(10, 100, 240))) linshi.setindex(self.axisitemy[0].index - span) if self.axisitemy[len(self.axisitemy) - 1].index >= -self.viewheight * 100 \ and self.axisitemy[len(self.axisitemy) - 1].index <= self.viewheight * 100: self.scene.removeItem( self.axisitemy[len(self.axisitemy) - 1]) if linshi.index <= self.viewheight * 100 and linshi.index >= -self.viewheight * 100: self.scene.addItem(linshi) self.axisitemy.insert(0, linshi) self.axisitemy.pop() def drawcircle(self, position): self.__dirty = True singlepoint = SinglePoint(position, 10) singlepoint.scale(1 / self.sumscale, 1 / self.sumscale) singlepoint.setToolTip(self.pointzuobiao(position)) self.scene.addItem(singlepoint) self.circleitem.append(singlepoint) return singlepoint def keyPressEvent(self, event): if event.modifiers() & Qt.ControlModifier: if event.key() == Qt.Key_R and self.origin: if self.addorigin: self.start = 0 if self.circleitem: self.graphicsView.scale(1 / self.sumscale, 1 / self.sumscale) for i in self.circleitem: i.scale(self.sumscale, self.sumscale) self.graphicsView.centerOn(self.origin) self.sumscale = 1 self.updateUi() self.axis() if event.modifiers() & Qt.ShiftModifier: if event.key() == Qt.Key_C: if self.addorigin: self.fenmiao = ~self.fenmiao self.axis() def mousePressEvent(self, event): self.start = 1 pos = self.graphicsView.mapFromGlobal( event.globalPos()) # event.globalPos()与QCursor.pos()一样 if 0 <= pos.x() <= self.viewwidth * 200 and 0 <= pos.y( ) <= self.viewwidth * 200: if self.addorigin: if event.buttons() == Qt.LeftButton: pass if event.buttons() == Qt.RightButton: self.__dirty = True self.drawcircle(self.graphicsView.mapToScene(pos)) elif event.buttons() == Qt.MiddleButton: pass QGraphicsView.mousePressEvent(self.graphicsView, event) # QGraphicsView::NoDrag :忽略鼠标事件,不可以拖动。 # QGraphicsView::ScrollHandDrag :光标变为手型,可以拖动场景进行移动。 # QGraphicsView::RubberBandDrag :使用橡皮筋效果,进行区域选择,可以选中一个区域内的所有图形项。 else: QMessageBox.about(self, '提示', '''请先确定遇难位置''') def mouseReleaseEvent(self, event): if self.addorigin: pos = self.graphicsView.mapFromGlobal(event.globalPos()) pos = self.graphicsView.mapToScene(pos) self.start = 2 self.updateUi(pos) self.axis() def deleteItem(self): item = self.scene.selectedItems() if len(item) == 0: return else: self.circleitem.remove(item[0]) self.scene.removeItem(item[0]) del item def wheelEvent(self, event): if self.addorigin: self.__dirty = True pos = self.graphicsView.mapFromGlobal(event.globalPos()) pos = self.graphicsView.mapToScene(pos) self.sc = 1.001**event.delta() if self.sumscale < 0.01 and self.sc < 1: return if self.sumscale > 100 and self.sc > 1: return self.sumscale *= self.sc self.lastsc *= self.sc self.graphicsView.scale(self.sc, self.sc) for i in self.circleitem: i.scale(1 / self.sc, 1 / self.sc) if self.lastsc >= 2: self.updateUi(pos) self.lastsc = 1 self.jishu += 1 elif self.lastsc <= 0.5: self.updateUi(pos) self.lastsc = 1 self.jishu -= 1 self.axis() else: QMessageBox.about(self, '提示', '''请先选择飞机降落点''') def configure(self): configureexample = Configure.ConfDlg(self) configureexample.show() def Getjw(self): alljw = [] for i in self.circleitem: jw = self.pointzuobiao1(i.pos()) print(jw) jw = jw.replace('N,', '') jw = jw.replace('S,', '') jw = jw.split('°') jw = [float(jw[0]), float(jw[1])] alljw.append(jw) return alljw @pyqtSignature('') def on_pushButton_clicked(self): planepositionexample = planeposition.PlanePositionDlg(self) planepositionexample.show() self.connect(planepositionexample, SIGNAL('ppap(QString)'), self.p) @pyqtSignature('') def on_FigurepushButton_clicked(self): alljw = self.Getjw() alljw = self.Transfor(alljw) alljw = self.Float(alljw) alljw = self.Transback(alljw) allpoint = [str(jw[0]) + '°N,' + str(jw[1]) + '°W' for jw in alljw] print(allpoint)