예제 #1
0
def run_proc():
    pygame.init()

    global_settings = Settings()  #实例化

    # 创建游戏主窗口
    screen = pygame.display.set_mode(
        (global_settings.SCREEN_WIDTH,
         global_settings.SCREEN_HEIGHT))  # 元组参数表示窗口大小,默认全屏024
    pygame.display.set_caption("My Picture Tool")

    SCREEN_RECT = screen.get_rect()
    pygame.display.update()

    #创建按钮
    buttonArray = []
    #按钮的元素:
    #'handle'按钮句柄,
    #Field:所属区域
    #'ProcType'执行动作类型,
    buttonArray.append({
        'handle': Button((0, 0), "ROT", visible=True),
        'ProcType': 'rotate'
    })
    buttonArray.append({
        'handle': Button((0, 1), "TRAP", visible=True),
        'ProcType': 'trapezoid'
    })
    buttonArray.append({
        'handle': Button((0, 2), "PARA", visible=True),
        'ProcType': 'parallelograms'
    })
    buttonArray.append({
        'handle': Button((1, 0), "ZOOM", visible=True),
        'ProcType': 'zoom'
    })
    buttonArray.append({
        'handle': Button((1, 1), "GRAY", visible=True),
        'ProcType': 'gray'
    })
    buttonArray.append({
        'handle': Button((1, 2), "B/W", visible=True),
        'ProcType': 'blackwhite'
    })
    buttonArray.append({
        'handle': Button((2, 0), "SEL", visible=True),
        'ProcType': 'select'
    })
    buttonArray.append({
        'handle': Button((2, 1), "GRID", visible=True),
        'ProcType': 'grid'
    })
    buttonArray.append({
        'handle': Button((2, 2), "BATCH", visible=True),
        'ProcType': 'batch'
    })
    buttonArray.append({
        'handle': Button((4, 0), "UNDO", visible=True),
        'ProcType': 'undo'
    })

    #当前选中的功能按钮
    config.setCurProcType("None")

    #创建图像
    imgFile = get_path("*.*")
    if not imgFile:
        return
    image = cv2.imread(imgFile, cv2.IMREAD_UNCHANGED)
    pic = Picture(image)

    (filepath, tempfilename) = os.path.split(imgFile)
    (filename, extension) = os.path.splitext(tempfilename)
    config.setPicFilePathAndExt(filepath, filename, extension)

    #创建控制器
    ctrl = Controler()

    while True:
        screen.fill(global_settings.BG_COLOR)  #调用属性设置屏幕的填充颜色
        #绘制各个按钮
        for item in buttonArray:
            item['handle'].draw(screen)

        #事件处理循环
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_x, mouse_y = pygame.mouse.get_pos()

                #检查是否点击了某个按钮
                for item in buttonArray:
                    tempButtonHandle = item['handle']
                    if tempButtonHandle.checkClick(mouse_x, mouse_y):
                        print(tempButtonHandle.getButtonText(), 'click')
                        #call entry
                        ButtonProcEntry(item, pic)
                        config.setCurProcType(item['ProcType'])
            elif event.type == pygame.KEYUP:
                if config.getCurProcType():
                    ctrl.KeyUpProcEntry(config.getCurProcType(), event.key,
                                        event.mod, pic)
                pass

        #绘制图形
        if pic.isNeedUpdate:
            img = pic.show(global_settings.getImageRect())
            screen.blit(
                img,
                (global_settings.DRAWING_LEFT, global_settings.DRAWING_TOP),
                img.get_rect())
            #pic.isNeedUpdate=False

        pygame.display.flip()  #使最近绘制的屏幕可见

    pygame.quit()